网上对二进制运算解释的过于复杂,最近在看了韩顺平老师讲的二进制运算,这里总结出来分享给大家
一、首先认识理解 原码、反码、补码
以下都是对于有符号的二进制而言的
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
网友评论