移位运算
这是大学时学的知识点了,好像是组成原理或者系统工程里讲的,忘记了,只记得是理工大学的一个女老师讲的,好几门课都是她给讲的。
恰巧翻翻hashmap原码,有个移位运算的作用忘了,复习一下;
1.原码、反码、补码
以单字节,8位为例:
最大值是2的7次方-1,2进制表示为01111111.不是8个1,因为首位是符号位,1代表负数。
比如15 ,二进制为 00001111,正数的原码、反码、补码都是一样的
比如-15,二进制为 10001111,
原码:10001111,反码:11110000 补码:11110001.
结论:正数的原码、反码、补码都一样,负数的反码是按位取反,补码是取反后+1.
程序中用于计算的全是补码:


2.移位运算
java中 有 逻辑左移<< 逻辑右移>> 无符号右移>>> 三个。
规则:逻辑左移右补0,逻辑右移左边补符号位;无符号右移左补0,不区分正负
15: 00001111
左移一位:00011110
右移一位:00000111
无符号右移一位 :00000111
-15: 11110001
左移一位:11100010
右移一位:11111000
无符号右移一位:01111000

浙公网安备 33010602011771号