我知道这是一个老问题,多次问过.但我无法找到任何令人满意的答案,因此再次提出要求.有人可以解释在整数溢出和下溢的情况下究竟发生了什么? 我听说过处理这个的"低阶字节",有人能解释一下是什么吗?
谢谢!
你可以想象当你只有2个地方在计算时(每次增加1个)
00
01
10
11
100
Run Code Online (Sandbox Code Playgroud)
但最后一个再次被削减到"00".所以有你的"溢出".你回到00.现在取决于比特的意思,这可能意味着几件事,但大多数时候这意味着你从最高值到最低值.(11到00)
Mark peters在评论中添加了一个好的:即使没有溢出,你也会遇到问题,因为第一位被用作签名,所以你将从高到低而不会丢失那一点.你可以说这个位与其他位"分开"
Java将数字循环到最大或最小整数(取决于它是溢出还是下溢).
所以:
System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE);
System.out.println(Integer.MIN_VALUE - 1 == Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
打印真实两次.
| 归档时间: |
|
| 查看次数: |
3308 次 |
| 最近记录: |