位运算

来源:互联网 发布:艾泽拉斯数据库 人口 编辑:程序博客网 时间:2024/06/05 06:40
位运算
(& , | , ^ , ~ , >> , << , >>>)
位运算就是还成二进制来进行运算


把0当作false    把1当作true


&==》按位与
如果两个二进制位都是1(就是都是正确的),那么结果就是1,否则是0
如 int i=6 & 3;    输出的是2
   0000 0110  ==》6
   0000 0011  ==》3
-----------------------
   0000 0010  ==》2




|==》按位或
如果两个二进制位都是0(都是错的),那么结果就是0,否则是1
如int j=6 | 3;     输出的是7
   0000 0110  ==》6
   0000 0011  ==》3
----------------------
   0000 0111  ==》7




^==》按位异或
如果两个二进制是  1和0  或  0和1 (不同的就是真的),那么结果就是1,否则是0
如int x=6 ^ 3;       输出的是5
   0000 0110  ==》6
   0000 0011  ==》3
----------------------
   0000 0101  ==》5
一个操作数A,对同一个操作数B连续异或两次,可以得到原本的操作数A
如  int p=17(这是操作数A) ^ 3(这是B);  ===》18
        p=p ^ 3;        ===》17




~==》按位非
反码=补码-1  (正数+1)
原码=反码取反
最高为1或0不变(最高位是1时是负数,0为正数)
如 int z=~ 6;
    0000 0110
    1111 1001   ==》先按位非,就是1变0,0变1
---------------------------------
            -1  ==》补码-1
    1111 1000   ==》反码
---------------------------------
    1000 0111   ==》反码取反   -7


如int c=~-6;
    1000 0110
    0111 1001   ==》取反
----------------------------
            +1
    0111 1010   
----------------------------
    0000 0101   ==》5
(总感觉负数按位非后 得出的结果是在原有的数字上去掉 “-” 减1,而正数是在原有的数字上加个 “-” 加1)
(以上的括号纯属猜的)
0 0
原创粉丝点击