原码、反码、补码
1、二进制的最高位是符号位:0 表示正数,1 表示负数
2、正数的原码、反码、补码相同
3、负数的反码:原码的符号位不变,其他位进行取反操作
4、负数的补码:反码 + 1
5、负数的反码:补码 - 1
6、Java 中的数值都是带符号的
7、计算机以补码方式进行运算、存储
8、以原码方式显示运算结果
位运算符
1、&(按位与):两位全为 1,运算结果为 1,否则为 0
2、|(按位或):两位其中为 1,运算结果为 1,否则为 0
3、^(按位异或):两位一个为 1,另一个为 0,运算结果为 1,否则为 0
4、~(按位取反):0 变 1,1 变 0
byte b1 = 2;
byte b2 = 3;
byte b3 = -2;
System.out.println(b1 & b2);
/*
2的原码、补码:00000010
3的原码、补码:00000011
按位与&运算后
运算结果的补码、原码:00000010
二进制原码转为十进制:2
*/
System.out.println(~b3);
/*
-2的原码:10000010
-2的反码:11111101
-2的补码:11111110
按位取反~运算后
结果的补码、原码:00000001
二进制原码转十进制:1
*/
5、>>(算术右移):低位溢出,符号位不变,符号位缺失的高位
(1)a >> b 本质:a / 2b
6、<<(算术左移):高位溢出,符号位不变,0 补缺失的低位
(1)a << b 本质:a * 2b
7、>>>(逻辑右移 / 无符号右移):低位溢出,0 补缺失的高位
(1)没有 <<< 符号
符号扩充
1、以 8 位二进制数为例,在保持值不变的前提下,将其转换成 16 位和 32 位的二进制数
2、不管是正数还是用补数表示的负数,都只需用符号位的值(0 或者 1)填充高位即可

浙公网安备 33010602011771号