java强制转换byte类型超出范围是怎么计算的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java强制转换byte类型超出范围是怎么计算的?相关的知识,希望对你有一定的参考价值。

为什呢126+4要求原码300就不用转原码了呢?
已解决
⑴如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
00101100即时补码也是原码

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吗?追答

int类型的值转换成byte,就是截取出值的第一字节。

追问

我把正数的补码也是原码搞忘了

参考技术A byte是一个字节,所以300的高位字节会丢失,剩下00101100=44
130=128+2 128用10000000表示,高位(这里表示第八位)是1所以为负数 所以是-128+2=-126
参考技术B 超出范围了,java byte的范围是[-128,127]。想表示130的话使用int就好了。为什么一定要用byte呢追答

其实 byre和int 又有啥区别呢

参考技术C 计算机是按补码来的

在Java中int类型强转为byte类型,强转为byte之后,数据超出byte的表述范围是如何计算的?

public class Aa {

public static void main(String[] args) {  byte i = 88;  byte r = 68;  byte f = (byte) (i + r);    System.out.println(f);

}

}

输出结果为-100

  88+68=156;二进制表示为:1001 1100,进行强制转换为byte后,因为byte是有符号的,取值范围为:-128-127;1001 1100是一byte数的补码,我们将它转为原码,即减一后再取反,但符号位不能变,得到:1110 0100,这个数也就是-100了

总结 :(88+68)-127+(-128)-1

 

以上是关于java强制转换byte类型超出范围是怎么计算的?的主要内容,如果未能解决你的问题,请参考以下文章

强制类型转换(Java)

java中变量赋值的理解

java初级面试题之byte b = 130;有没有问题的问题

java类型转换详解(自动转换和强制转换)

java 详细介绍short,byte,char三种类型,我分不清

java中byte[]转换成int