黑马程序员技术交流社区
标题:
关于byte赋值的问题
[打印本页]
作者:
Dora
时间:
2014-3-6 22:31
标题:
关于byte赋值的问题
package com.yy;
public class Demo6 {
public static void main(String[] args) {
byte a=(byte) 132;
byte a1=127;
System.out.println(a);
System.out.println(a1);
}
}
输出结果分别是 -124和127
为什么是-124呢?求高手指点
作者:
nicholyx
时间:
2014-3-6 22:48
本帖最后由 nicholyx 于 2014-3-6 22:50 编辑
(byte) 132 --> 化成二进制是 1000-0100,
byte在内存中占8位,该二进制最高位是1,所以是负数,
由于在计算机中是用补码形式保存的,所以1000-0100是补码,
其原码计算公式是:补码-1 之后 再 取反,即原码为1111 1100 --注意最高位是符号位,符号位不变
所以该数的是 -111 1100;即 -124
作者:
12560zhang
时间:
2014-3-6 22:50
byte 是从-128到127,最大数就是127,当你给的数大于127,如132,则产生溢出。128时就从-128那开始,129就是-127,如此类推
作者:
Aenon
时间:
2014-3-6 22:54
所有数据类型都有范围 ,头数字0就是正的,1 就是负的。正与负的区别也因此就在于取反加一。在任何语言中都是这样的,你说的这个状况是数值溢出。
Java 中的 byte 总共就 8 位,正数上限的情况首位也只能是 0,其他位都可以是 1。但是如果正数过大了,例如 2^8,计算机不得不把首位变成 1,这就出现溢出情况,把它按照正常的方式输出了,于是就成了负的。byte 8 位是固定的,不会因为溢出增到9位。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2