黑马程序员技术交流社区

标题: 【哈尔滨校区】关于byte b = (byte)128; 而打印b为-128的原因 [打印本页]

作者: sky123    时间: 2015-12-6 11:48
标题: 【哈尔滨校区】关于byte b = (byte)128; 而打印b为-128的原因
public static void main(String[] args) {
                byte b = (byte)128;
                System.out.println("b = " + b);
        }
打印出来的结果为:b = -128;
首先我们知道byte类型是一个字节,
八个二进制位:
0       0       0       0       0       0       0       0
128   64    32      16    8       4        2       1
那么byte类型的取值范围为:-128~127
而int类型是用4个八二进制位表示
int类型128二进制表示
0000 0000 0000 000 0000 0000 1000 0000
强制转换为byte型时,只取后八位,第一位为正负位那么:
byte类型128的二进制补码表示
    1             0      0       0       0       0        0        0
正负位   
计算机中运算和储存都是通过二进制补码形式,int类型中128二进制表示第一位是0,为一个整数,而当强制转换为byte类型后,因为计算机通过二进制补码形式运算和储存,则
正负位为1,表示为一个负数,通过运算可知byte类型 128的二进制原码为
   1           1     0      0       0       0       0        0        0
为-128







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2