C语言支持按位布尔运算,也就是同样有与,或,取反,异或。
一个数,异或它本身=0。通过异或的这一特点,我们可以不需要第三个值就能将两个值调换。“这种交换方式并没有性能上的优势,它仅仅是一个智力游戏。”——《深入理解计算机系统》
假设一开始有两个数x=a,y=b
y=x⊕y; >> y=a⊕b
x=x⊕y; >> x=a⊕(a⊕b)=b
y=x⊕y; >> y=b⊕(a⊕b)=a
C语言还提供了逻辑运算符||(逻辑或)、&&(逻辑与)和!(逻辑非)。逻辑运算认为所有非零的参数都表示真(true,返回表示为1),0表示假(false,返回表示为0)。
大部分情况下容易把逻辑非和取反当成一样的,举例说明区别:
X==Y的等价表达式,相等返回1,否则返回0,可以用位运算和逻辑运算实现。
!(X⊕Y) 像一个表情……
当X=Y的时候,异或之后的结果是0,逻辑非,返回1;当X!=Y的时候,异或之后的结果是个非0值,逻辑非(这个时候如果用的取反,只会把每位取反,达不到返回0的效果),返回0。