gpt4 book ai didi

java - 溢出如何在java中工作?

转载 作者:太空狗 更新时间:2023-10-29 22:31:32 24 4
gpt4 key购买 nike

我读过有关溢出的内容,我知道“溢出是指数字太大以至于不再适合数据类型,因此系统“环绕”到下一个最低值并从那里开始计数".

例如:

short s = (short)1921222; // Stored as 20678

在那个例子中,我们从 -32768 (Short.MIN_VALUE) 开始计数,但是当我尝试用另一种整数数据类型证明时,它似乎不起作用同样的方法...

byte b = (byte)400; // Stored as -112

上面的例子从 0 开始计数,这是我发现得到 -112 的唯一方法

我不知道我做错了什么。

最佳答案

Java Language Specification说:

The integral types are byte, short, int, and long, whose values are 8-bit, 16-bit, 32-bit and 64-bit signed two's-complement integers, respectively, and char, whose values are 16-bit unsigned integers representing UTF-16 code units.

所以,shortbyte 都是two's complement整数。

short 是 16 位,这意味着它可以容纳 2^16 = 65536 个不同的值。在第65536个值后溢出。
1921222 模 65536 是 20678。这小于 32768(2^15,二进制补码的转折点)所以我们保留一个正数。

byte 是 8 位,这意味着它可以容纳 2^8 = 256 个不同的值。这个在第 256h 个值之后溢出。400 模 256 为 144。该值高于 128,即二进制补码的转折点 - 因此它将被解释为负二进制补码数。

关于java - 溢出如何在java中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com