A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Dora 中级黑马   /  2014-3-6 22:31  /  1165 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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呢?求高手指点

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 nicholyx 于 2014-3-6 22:50 编辑

(byte) 132 --> 化成二进制是 1000-0100,
byte在内存中占8位,该二进制最高位是1,所以是负数,
由于在计算机中是用补码形式保存的,所以1000-0100是补码,
其原码计算公式是:补码-1 之后 再 取反,即原码为1111 1100 --注意最高位是符号位,符号位不变
所以该数的是 -111 1100;即 -124

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
byte 是从-128到127,最大数就是127,当你给的数大于127,如132,则产生溢出。128时就从-128那开始,129就是-127,如此类推

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
   所有数据类型都有范围 ,头数字0就是正的,1 就是负的。正与负的区别也因此就在于取反加一。在任何语言中都是这样的,你说的这个状况是数值溢出。
Java 中的 byte 总共就 8 位,正数上限的情况首位也只能是 0,其他位都可以是 1。但是如果正数过大了,例如 2^8,计算机不得不把首位变成 1,这就出现溢出情况,把它按照正常的方式输出了,于是就成了负的。byte 8 位是固定的,不会因为溢出增到9位。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马