C++中^运算符的含义解析及给定位运算函数代码说明
^运算符及位运算逻辑解析 嘿,我来帮你把这段C++位运算代码拆解得明明白白,先从你问的^运算符说起~
首先,^在C++里是**按位异或(XOR)**运算符,它的规则很简单:对两个整数的二进制每一位进行对比,相同的位结果为0,不同的位结果为1。举个小例子:1 ^ 1 = 0,1 ^ 0 = 1,3 ^ 5(二进制011 ^ 101)结果是110也就是6。
先把你给出的完整代码贴出来方便对照:
void bitWiseOperation(int a, int b, int c){ // Your code here int d, e, f, g, h; d = a ^ a; e = c ^ b; f = a & b; g = c | (a ^ a); h = ~e; cout << d << "\n" << e << "\n" << f << "\n" << g << "\n" << h << "\n"; }
接下来逐个分析每个变量的运算逻辑:
d = a ^ a:
任何整数和自己做异或运算,每一位都是相同的(比如a的某一位是1,和自己的1异或得0;是0的话和0异或也得0),所以不管a是什么值,d的结果永远是0。比如a=7(二进制111),7^7=000即十进制0。e = c ^ b:
这就是标准的按位异或操作,把c和b的二进制每一位逐一对比计算。举个实际数值的例子:如果c=6(110),b=3(011),那6^3=101也就是十进制5。f = a & b:
这里的&是**按位与(AND)**运算符,规则是只有当两个二进制位都为1时,结果位才是1,否则为0。比如a=5(101),b=3(011),5&3=001即十进制1。g = c | (a ^ a):
首先a^a的结果是0,然后|是**按位或(OR)**运算符,规则是只要两个二进制位中有一个是1,结果位就是1。任何数和0做按位或运算,结果都等于这个数本身,所以g其实就等于c。比如c=4,4 | 0 = 4。h = ~e:
~是**按位取反(NOT)**运算符,它会把变量的每一位都翻转(0变1,1变0)。这里要注意,C++中int是有符号整数,采用补码存储,所以取反后的结果会是负数。比如e=5(二进制00000000 00000000 00000000 00000101),取反后是11111111 11111111 11111111 11111010,这是-6的补码,所以h的结果是-6。
内容的提问来源于stack exchange,提问作者Ketan Pal

