一、预备知识
1、原码:
正数的原码就是其对应的二进制数
负数的原码就是其绝对值的原码在符号位加1(最高位)
2、反码(就是原码到补码或补码到原码的过度码)
正数的反码与原码相同
负数的反码就是其原码除符号位,取反
3、补码
正数的补码与其原码相同
负数的补码就是其原码除符号位其余取反在最低位加1
十进制在二进制中可以使用原码、补码、反码表示,但是只能使用补码来进行运算和存储。[符号位的进位舍弃]
例:求-8的补码表示
s1:求出-8的原码
|-8| 的原码 :1000 1000
s2:求出其的补码
|-8| 的补码 :1111 1000
例:short a = 128; byte b = (byte)a, b = ?
首先,java中byte占一个字节,short占两个字节,所以强转要进行高位的截取
a = 128的原码:00000000 10000000
强转截取后得到b的补码(因为计算机中以补码形式参与运算),10000000
此时要求出b的十进制,则要把b的补码变成原码。在这里10000000 - 1 我不太懂,我只能记住这里10000000的代表的十进制就是-2^7,所以b就是等于-128.