与,或,非,异或进行位运算的总结

1.与全零,全F的结果及应用

此处仅以32位变量x=0x12345678为例, 设O(zero)=0x00000000, F(one)=0xFFFFFFFF

x&O=0,  x&F=x

x|O=x,   x|F=F

x^O=x,   x^F=~F

所以对于要把变量某些位置0,某些位不变,则选&

要把某些位置1,某些位不变,则选|

要把某些位变为原值的反,某些位不变,则选^

比如将x的最低有效位字节设置成全1,其他字节都保持不变,即变成0x876543FF, 则进行运算x|0x000000FF即可

2.讨论与或非异或结果的完备性

x,y进行操作之后的结果有16种(当x=0,1;y=0,1时),每一类操作只能导出一种结果,比如&操作符0&0=0,0&1=1,1&0=1,1&1=1,结果为[0,1,1,1].这样的结果有16种,两个操作数通过操作符的组合是否可以覆盖16种情况.刚开始因为三种双目操作符的结果都是对称的,写成矩阵[0,1;1,1]的形式.所以我认为不对称的结果是不能通过组合得出的,其实不然,比如[1,0;1,1]是可以通过x|~y得到的.以下是我已经得到的一些结果

[0,0;0,0] = x|~x

[0,0;0,1] = x&y

[0,0;1,0] = x&~y

[0,0;1,1] = (x&y)&(x&~y)

[0,1;0,0] = ~x&y

[0,1;0,1] = ~(x&~y)&(x|y)

[0,1,1,0] = x^y

[0,1;1,1] = x|y

[1,0;0,0] = ~(x|y)

[1,0;0,1] = x&~y

[1,0;1,0] = (x|~y)&~(x&y)

[1,0;1,1] = x|~y

[1,1;0,0] = (~x|y)&~(x&y)

[1,1;0,1] = ~x|y

[1,1;1,0] = ~(x&y)

[1,1;1,1] = ~(x&~x)

这样就证明了这四个符号可以做出任何情况

 

    原文作者:位运算
    原文地址: https://www.cnblogs.com/york-hust/archive/2013/01/11/2856830.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞