- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我读过有关溢出的内容,我知道“溢出是指数字太大以至于不再适合数据类型,因此系统“环绕”到下一个最低值并从那里开始计数".
例如:
short s = (short)1921222; // Stored as 20678
在那个例子中,我们从 -32768 (Short.MIN_VALUE)
开始计数,但是当我尝试用另一种整数数据类型证明时,它似乎不起作用同样的方法...
byte b = (byte)400; // Stored as -112
上面的例子从 0 开始计数,这是我发现得到 -112 的唯一方法
我不知道我做错了什么。
最佳答案
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.
所以,short
和byte
都是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/
我是一名优秀的程序员,十分优秀!