原码、补码 、反码 的理解 (8个重点) 和java的7个位运算
- 原码、补码 、反码 的理解
- 二进制的最高符号位:0表示正数,1表示负数(符号为是第一为,高位是左边的数,低位是右边的数)。
- 正数的原码 、反码 、补码一样(三码和一)。
- 负数的原码 = 它的原码符号位不变,其他取反。
- 负数的补码 = 它的反码 + 1 ,负数的反码 = 负数的补码 - 1。
- 0的反码和补码都是0。
- java没有符号数,换言之,java的数都是有符号的。
- 在计算机运算的时候,都是以补码的方式运算的。
- 当我们看运算结果的时候要看它的原码。
- java的7个位运算:(&、|、^、~、>>、<<和 >>>)
-
按位与 & :两位全为1,结果才为1,否则为0。
- 例如:10010001 & 11100101 = 10000001
- 按位或 |:两位有一个为1,结果为1,否则为0;
- 按位异 ^ :两位有一个为0 一个为1 ,结果为1,否则为0
- 按位取反 ~:0变1,1变0
- 算数右移 >>:低位溢出,符号不变,并用符号位补溢出的最高位
- 算数左移 << : 符号位补不变低位补0
- >>> 逻辑右移:无符号位补溢出高位,逻辑右移就是不考虑符号位,右移一位,左边补零即可。
- 说明:没有逻辑左移
- 练习
- 2 & 3 = 2 思路:先得到2的原码正数的原码 、反码 、补码一样(三码和一)= 00000010 3的原码00000011。 00000010 & 00000011 = 00000010 。 00000010再把这个原码转换成十进制就是2。 2 & 3 = 2。

浙公网安备 33010602011771号