栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《C语言入门100例》第三例 数值交换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《C语言入门100例》第三例 数值交换

《C语言入门100例》 (第三例)数值交换 一、习题求解

1、题目(来自leetcode)

  • 编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。

2、源码实现

int* swapNumbers(int* numbers, int numbersSize, int* returnSize){
    numbers[0] ^= numbers[1]; //(1)
    numbers[1] ^= numbers[0];
    numbers[0] ^= numbers[1];
    *returnSize = numbersSize;//(2)

    return numbers;
}

下面解释上面的代码

  • (1)这里使用的是位运算符和赋值运算符的结合

位运算符:这是C语言提供的能够操作二进制数的操作符号,分别是^、~、|、&、<<、>>六种操作运算符。这里我们暂时先介绍前四种逻辑运算符。使用这些运算符时请注意这些操作符只能用于整形操作数,即char 、int 、long 、short类型。

^异或运算符,为二元运算符,规则是对应位相同时为0,不同时为1,如下表:

^01
001
110

~取反运算符,为一元运算符,规则是将整数值取反,即将0变成1,1变成0,如下表:

~01
10

|或运算符,为二元运算符,对应位只有同时为0时,才变成0,否则都为1,如下表:

|01
001
111

&与运算符, 二元运算符,只有当对应位同时为1时,才变为1,否则都为0,如下表:

&01
001
110

上述代码中出现的^=这个操作符号是巧用了异或运算符对number[0]和number[1]进行了替换,假设number[0]的值为12,二进制为0000 1100,number[1]值为10,二进制为0000 1010
number[0] ^= number[1] ==> 0000 1100 ^ 0000 1010 = 0000 0110
number[1] ^= number[0] ==> 0000 1010 ^ 0000 0110 = 0000 1100
number[0] ^= number[1] ==> 0000 0110 ^ 0000 1100 = 0000 1010

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号