位运算
(& , | , ^ , ~ , >> , << , >>>)
位运算就是还成二进制来进行运算
把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当作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)
(以上的括号纯属猜的)