原码 反码 补码
正数的原码,反码,补码都是一样的
原码:转换为二进制之后的一串数字,第一位表示符号位,0为正,1为负。
反码:负数的反码,符号位不变,其他位取反,0变成1,1变成0。
补码:负数的补码等于其反码加1,符号位参与运算
原码不能解决负数计算的问题
反码不能解决跨0(例-6+7)的问题
补码解决了负数不能跨零计算的问题,并且补码还可以记录一个特殊的值-128,所以byte的取值范围是(-128-->127)
位运算
<< 左移
不分正负数,右边(低位)补0
例一个byte 00000001(1)左移3位 1<<3 ,00000001整体左移三位,多出的部分舍弃,右边补0。变成 00001000
>> 右移
整体右移,正数高位补0,负数高位补1。
>>> 无符号右移
不管正负,高位全部补0
& 与运算
有0为0,全1才为1。
I 或运算
有1为1,全0为0
~ 非
一个数按位取反
^ 异或
相同为0,不同为1