下面是例子:
byte a=(byte)130;
由于byte的取值范围是(-127~127); 很明显130超出了取值范围。 输出的a值是-126,那么是怎么来的呢?以下是取值过程。
130的二进制是
原码/补码:00000000 00000000 00000000 10000010 因为是正的 所以原码和补码一样(计算机里的数据都是以补码的形式进行计算和存储的)
那byte截取原码 1 0000010 很明显最高位为1 那值是应该是个负数
反码 1 1111101
补码 1 1111110(反码+1)
那转换成十进制即为-126
那么同理 -130呢?
先转成2进制
原码:10000000 00000000 00000000 10000010
反码:11111111 11111111 11111111 01111101
补码:11111111 11111111 11111111 01111110
byte截取到的原码为
01111110 很明显为正 那原码和补码一致 即为126.
|