-
位操作符一共分为4种:
& 按位与
| 按位或
^ 按位异或
~ 按位取反 -
按位与(&)
两个数以补码的形式进行计算,对应的补码有0则为0,全1 则1//例如 //4&10 //10的补码为: 00000000 00001010(整形应该为4个字节,32位比特位,这里为了书写方便,省去了中间的两组0,一下的例子同理) //4的补码为: 00000000 00000100 //那么经过按位与的操作过后结果应该为: // 00000000 00000000(转化为10进制则为:0)
//我们可以使用程序来验证结果的准确性 #include<stdio.h> int main() { printf("%d",4&10); return 0; }
-
按位与( | )
同理也是以补码的形式进行计算的,不过运算规则是:有1则1,全0则0//也拿4和10举例 //4的补码: 00000000 00000100 //10的补码:00000000 00001010 //按位与的操作的结果则为 // 00000000 00001110(转为为10进制则为:14)
//我们同样有可以拿代码来验证 #include<stdio.h> int main() { printf("%d",4|10); return 0; }
-
按位异或(^)
同理,运算规则变为:相同为0,不同为1
//一样的举例4和10 //4的补码; 00000000 00000100 //10的补码:00000000 00001010 //那么经过按位异或的操作结果应该为 // 00000000 00001110(转为为10进制为:14)
//我们有可以来验证一下 #include<stdio.h> int main() { printf("%d",4^10); return 0; }
-
按位取反(~)
同理,运算规则变为:0变为1,1变为0
按位取反通常用于无符号整数,而在有符号整数中,它可能导致符号位的改变//以10为例子 //10:00000000 00001010 //按位取反后的结果为 11111111 11110101(这里是很值得注意的地方) //因为这里不像上面的其他例子,这里的最高位变成了1,这意味着这个数变成了负数 //那么我们就应该注意了,负数的原码与补码并不相同 //故而我们需要进行转化 //补码:11111111 11110101(取反,再+1得到原码,且符号位是不变的) //原码:10000000 00001011(转化为10进制为:-11)
//一样的我们可以通过代码来验证起准确性 #include<stdio.h> int main() { int a =10; printf("%d",~a); return 0; }
-
最后值得说的就是,关于位操作符的使用对象只能为整数,其他的不适用
位操作符(详解)
最新推荐文章于 2024-09-26 10:58:05 发布
本文详细解释了C语言中的位操作符(如按位与、按位或、按位异或和按位取反),介绍了它们基于补码的运算规则,并以实例展示了如何在整数中应用这些操作符。特别强调了位操作符只适用于整数的情况。
摘要由CSDN通过智能技术生成