一:位操作符:
(1)基本介绍:
&按位与
|按位或
^按位异或
注意:这里的位指的都是二进制位,用位操作符进行操作时的操作数必须是整数
(2)按位与&:
两个数对应的二进制位都为1才为1,一个0为0就是0。
例子:
要算出3 & -5,必须先把3还有-5的补码写出来。
而3是正数,原码反码补码相同,所以不需要进行改变。
而-5是负数,就需要对-5的原码进行取反(除符号位)得到反码,加1后得到-5的补码。
之后按位与就得到了这个数
而我们要打印出结果,就要把反码变成原码,而%d是打印一个有符号的整数,上面的按位与结果最高位是0,所以是正数,原码反码补码相同,不需要对它进行改变。
(3)按位或 | :
只要有1就为1,两个同时为0才为0。
例子:
要算出3 | -5,必须先把3还有-5的补码写出来。
而3是正数,原码反码补码相同,所以不需要进行改变。
而-5是负数,就需要对-5的原码进行取反(除符号位)得到反码,加1后得到-5的补码。
之后按位或就得到了这个数
而我们要打印出结果,就要把反码变成原码,而%d是打印一个有符号的整数,上面的按位或结果最高位是1,所以是负数,因此需要对它变成原码。
对这个数减 1 变成反码。之后对反码取反(除符号位)就行了。
(4)按位异或 ^ :
相同为0,相异为1。
例子:
要算出3 ^ -5,必须先把3还有-5的补码写出来。
而3是正数,原码反码补码相同,所以不需要进行改变。
而-5是负数,就需要对-5的原码进行取反(除符号位)得到反码,加1后得到-5的补码。
之后按位异或就得到了这个数
而我们要打印出结果,就要把反码变成原码,而%d是打印一个有符号的整数,上面的按位异或结果最高位是1,所以是负数,因此需要对它变成原码。
对这个数减 1 变成反码。之后对反码取反(除符号位)就行了。
(5)按位异或 ^ 的特点:
1.两个相同的值异或为0。
2.0异或一个整数为这个整数。
3.异或支持交换律
(6)不创建中间变量实现两个数的交换
int main() {
int a = 3;
int b = 9;
printf("交换前的数值%d,%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后的数值%d,%d\n", a, b);
return 0;
}
解释: