java中为什么两个byte整数想加的结果超出表述范围后强制转换byte类型后会得到负数,具体过程

java中为什么两个byte整数想加的结果超出表述范围后强制转换byte类型后会得到负数,具体过程例如
byte b1 = 67
byte b2 = 89
byte b3 =(byte)(b1+b2)=-100

为什么等于-100,砍掉三个字节的具体过程是怎样的

第1个回答  2016-10-07
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。本回答被提问者和网友采纳

java中为什么两个byte整数想加的结果超出表述范围后强制转换byte类型后...
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 ...

Java二进制正数强制转换byte后变负数的问题。
正好8位一个字节,第一个位是符号位。整型数在计算机中用补码存储的。所以由补码11101001求原码 (负数求原码除了符号位,其他位依次取反最后加一,或者先减一再取反,结果一样的)得到原码10010111 就是 -23。

在Java中int类型强转为byte类型,强转为byte之后,数据超出byte的表述范围...
byte的最小值是-128,最大值是127,就好像一杯水的容量是有限的,当你杯子的水装满了,自然也就会溢出,127就好像是杯子最上面的那一层水,你只要加上一滴,就会溢出,流到杯子底部,而杯子的最底部就是-128。按照这种逻辑,你的i+r=156,也就是有28流到了底部,最底部是-128,被28覆盖了28,...

Java中byte的加法
byte的范围是-128到127,超出了的部分到下一个循环里 b3比上限超出了29,所以最终是-100 PS,127+1在byte里会变成-128,所以不是直接用-128+29,而是-128+28,因为原来的数字加上1才能到-128

JAVA数值越界在内存中是怎么处理的?比如:byte b = 129 ,怎么转?_百 ...
这个是涉及到内存溢出,直接写byte b = 129肯定是报错的,如果强转就不一样了结果是-127,因为byte的范围在Java中的定义就是1个字节,即表示数在 -127~128,一共是256个数字,内存溢出就是简单来说就像一个轮子,这个byte型的轮子就是把这256个数字连成一个圈,128后面的数字就是-127,也就是...

关于java中类型转化运算 为什int型128转换成 byte型就成了-128了呢...
转化成byte类型表示为:1000-0000 我们会发现这里首位需要表示为值!但是遗憾计算机不会自动识别造型时的期望值。1000-0000在计算机中是一个补码而并非一串正数二进制。我们对它取反得到0111-1111发现正是最大的byte类型值127,再加一得128,而首位为1,表示为负,即1000-0000表示的就是-128就是最小的...

java强制转换byte类型超出范围是怎么计算的?
0...01111110( int型126)+0...00000100(int型4)=0...10000010(int型130)即int型数130转换成byte型后(转换方式是截取int型数的第一字节),刚好是-126的补码( 10000010)。再看300 0...0100101100(int型300),截取第一字节是 00101100不就是44吗?

java中调用String中的getBytes()得到的是byte数组,把他赋给一个数组b...
你需要在Demo中重写object类里的方法,才能比较数组里的属性是否相等。否则equals==,比较的都是地址值,因为地址值不同得到的都是false。

...为什么JAVA显示错误?3应该在byte可以显示的范围内啊
java中byte、short类型相加的时候,都会自动提升到int类型的,所以x + y是int + int-->结果是int 需要强制转换为byte byte z = (byte) ( x +y);

java byte定义变量后,当该变量值超过127后,会变成负数,是因为补码的...
正是采用补码,称为有符号数。一个字节,127是最大正数,再加1,就超过,变成了-128,最小的负数,称补码溢出,这是补码的特性

相似回答