11111111 左边第一个1,表示负号位,十进制的值为-1
也就是说10000000~11111111都是负数,即-128~-1
而范围在00000000~01111111都是正数,即0~127
最小的负数为 1000 0000,为什么是这个呢,因为计算机中负数是补码表示,真实的值是将补码除了符号位其余的取反,再加1,所以 1000 0000 除了符号位取反得 1111 1111,再加1,得到 1 0000 0000,但是它的属性是负数,所以是-128。明显看到它已经是9位了,这也是要用补码的一个原因。 具体的你可以查一下 原码 反码 补码 相关知识。byte
取值范围 -128~127 最高位符号位
67 0100 0011
89 0101 1001
156 1001 1100
67+89=156变成了int类型 24个0 1001 1100 强制转换成byte类型。砍掉了前面24个0。
还是 1001 1100,这个数在int类型中是156,但是在byte中就是-100。
具体看这里:
(byte)
127 = 0111 1111
127+1 = 128,超范围,上溢出,变成-128 1000 0000
那么-128+1呢? ------> 1000 0001
所有156(int) = 1001 1100(byte)= -128 + 28 = -100。001111110( int型126)
+000000100(int型4)
=010000010(int型130)
即int型数130转换成byte型后(转换方式是截取int型数的第一字节),刚好是-126的补码( 10000010)。
再看300
00100101100(int型300),截取第一字节是 00101100不就是44吗?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)