JAVA数值越界在内存中是怎么处理的?比如:byte b = 129 ,怎么转?

如题所述

这个是涉及到内存溢出,直接写byte b = 129肯定是报错的,如果强转就不一样了结果是-127,因为byte的范围在Java中的定义就是1个字节,即表示数在 -127~128,一共是256个数字,内存溢出就是简单来说就像一个轮子,这个byte型的轮子就是把这256个数字连成一个圈,128后面的数字就是-127,也就是128+1就变成了它的最小数-127,-127-1就变成了它的最大数128,这就跟我们的时钟是一样的,23的下一个时间是0,0的前面是23,其他的数值类型也是这样的。你设定一个超范围的数字时比较一下它比这个数值类型的最大值或者最小值,看它小多少或者大多少就可以推出来了。另外前面的朋友说的补码就是专业点的说法,我这种没有从机器码的角度解释。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-16
byte b = (int)129
129写成整数的二进制形式在内存中的存储是:

00000000 00000000 00000000 10000001
因为byte占1个字节,强制转换时,取低字节 10000001,这存储的时补码,转换成原码就是11111111,就是-127.
再举一个例子。byte b = (int)255,
在内存中的存储是:
00000000 00000000 00000000 11111111,取低位之后,b在内存中的补码是11111111,转换为原码是-1
所以,现在你明白了吧。强制转换是取低位字节。和c,c++一样。
第2个回答  2015-11-10
首先在java中,你这么写就在编译就会报错;要么你把byte改成int
要么把129强转成byte;这样你的b实际上就是-127;内存中你要是强行转成byte;具体流程:
129=10000001但是符号位是1也就是说是负数;负数在存储的时候是以补码的形式存储;所以10000001-1=>10000000,然后再按位取反10000000取反,符号位不动10000000=>11111111=>-127;
第3个回答  2013-06-26
byte b = 129;是错误的,智能提示你无法转换。明显感知到129已经超过了byte范围。你可以:byte b = (byte)129;因为编程了10000001(补码,最高位1表示负数;反码是:10000000,原码:11111111,不算最高位,那么是-127)本回答被网友采纳
第4个回答  推荐于2018-04-13
通常的处理是往高字节的类型转换,比如转换成int
首先你使用一个数据的时候最好要确定它的使用范围是多少,对症下药,了解各个数据类型的范围是多少。
如果超出所有数据类型的范围,那么可以使用BigDecimal,它可以达到精确计算,另外还可以用NumberFormat类的format()方法对数据进行格式化控制本回答被网友采纳

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

java数组越界问题。int与byte转化问题。
比如 对于:byte b = (byte)1024;1024的二进制表示是:100 0000 0000 byte只能表示8位,从右往左截断,所以结果是 0000 0000,也就是 十进制的 0 byte b = (byte)257;257的二进制是:1 0000 0001 从右往左截断,结果是 0000 0001,也就是十进制的 1。当然如果是 byte b = (byte)...

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

在Java中int转byte类型,超出byte的范围该如何计算,答案尽可能详细_百 ...
一个字节byte长8位,也就是2的8次方,换成2进制后就是 00000000~11111111 取值范围就是那么多,10进制就是0~255。如果更长的类型如int转成更短的类型,那么只保留短类型那么多长度的数据。假设类型A为9位,其某变量值为 0 1111 1111 ,10进制为255,转成byte正好也是255 假设类型A变量值为 1 ...

java 强制类型转化:
byte b ;b=120; \/\/不会出错.是因为120java中默认是int型,也就是你在赋值的时候java中默认的转换成byte型了而byte型的存储范围是-128-127由int型120到byte型120并没超出byte的存储空间,所以不会报错,而如果你将其换成,128则会报"cannot convert from int to byte" 因为已经超出了存储范围了 b...

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

java中byte是什么意思
Java中的byte是一种基本数据类型,它占用1个字节,即8位,范围在-128到127之间。byte通常用于处理二进制数据或者字节流,比如文件读取、网络传输等。byte的小尺寸使得它在某些场景下使用更加高效,比如在嵌入式系统或者节约带宽传输的环境中。同时,byte还可以通过位运算进行位操作,或者用于存储补码表示二...

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

java中byte b=10;byte b1=~b;编译错误原因。byte b 2=~10;是正
java中byte在内存中实际上是用int运算的。b取反后,会自动变成int类型。加法、减法,都一样,byte会自动变成int类型。所以会报错。而~10可以,这是java字面量编译原则,会先将~10计算出来。在赋值给byte,所以不会有问题。

java 数据类型转换的问题 byte a = 100; int b = 98; byte c = (byte...
byte类型使用1字节存储,表示范围-128~127,int使用4字节存储,当byte+int时会将结果类型转为int,因为int表示范围大于byte,不影响精度,所以结果为197,但是当(byte)(a+b)时,是将计算结果int转为byte,存储空间也有4字节变为1字节,即是保留8个bit,把他们全部转换成2进制=11000110(198刚好8位),此时...

相似回答