黑马程序员技术交流社区

标题: 关于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