首先说一下原码,反码,补码
原码:第一位是符号位,正数符号位为0,负数符号位为1
反码:正数的反码不变
负数反码符号位不变,其它位取反
补码:正数的补码不变
负数的补码是其反码加1
5的二进制原码为: 0000 0101
5的二进制反码为: 0000 0101
5的二进制补码为: 0000 0101
-5的二进制原码为:1000 0101
-5的二进制反码为:1111 1010
-5的二进制补码为:1111 1011
-------------------------------------------------------------------------
计算机中,负数是以反码形式存在的。
int i = -1
32位int
则为 1111 1111 1111 1111 1111 1111 1111 1111
-------------------------------------------------------------------------
java中的移位运算符分为两种,一种是有符号移位,一种是无符号移位
有符号右移时, 按照符号 在首位补上0或1
无符号右移时,在首位补上0
左移不区分 有无符号,末尾直接补0
-------------------------------------------------------------------------
java中byte,short移位运算时先将byte或short扩展为int(前面按符号补0或1)
然后对int进行移位
再将int转回byte或short(舍弃前面的位)