彻底搞清楚二进制运算(位运算、位移运算)

网上对二进制运算解释的过于复杂,最近在看了韩顺平老师讲的二进制运算,这里总结出来分享给大家

一、首先认识理解 原码、反码、补码

以下都是对于有符号的二进制而言的

1、二进制的最高为是符号位:0表示证书1表示负数

2、正数的原码反码补码一样

1 ==> 原码 0000 0001 ==> 反码 0000 0001 ==> 补码 0000 0001

3、负数反码等于原码取反符号位不变,补码等于反码+1

-1 ==> 原码 1000 0001 ==> 反码 1111 1110 ==> 补码 1111 1111

4、0的反码补码都是0

5、计算机运算的时候都是以补码的方式来运算的

二、位运算

有三种位运算 即 &按位与 | 按位或 ^ 按位异或

运算规则

&按位与 :两位全1结果为1,否则为0
| 按位或 :两位有一位为1结果为1,否则为0
^ 按位异或:两个一个为1一个为0结果为1,否则为0
注意:所有的运算是以补码的方式来运算的,运算的结果也是补码需转回原码才是最后结果

案例:分别计算 2&-2、2|-2、2^-2
2的补码:和原码一样 0000 0010
-2的补码: 原码:1000 0010  反码:1111 1101  补码(原码+1):1111 1110

计算:2&-2
2  0000 0010
-2 1111 1110
结果:0000 0010    2

计算:2|-2
2  0000 0010
-2 1111 1110
结果:1111 1110    =》反码(补码-1):1111 1101 =》原码:1000 0010 =》-2

计算:2^-2
2  0000 0010
-2 1111 1110
结果:1111 1100    =》反码(补码-1):1111 1011 =》原码:1000 0100 =》-4

三、位移运算

右移运算符:>> 地位溢出符号位不变,并用符号位补溢出高位
左移运算符:<< 符号位不变地位补0

案例:分别计算 1 >> 2 、1 << 2
1 >> 2
1补码  =》0000 0001  >> 2  =》0000 0000  结果:0

1 << 2
1补码  =》0000 0001  << 2  =》0000 0100  结果:4

你可能感兴趣的:(彻底搞清楚二进制运算(位运算、位移运算))