Bir*_*nii 0 java integer integer-arithmetic
我有以下代码,其中结果超出了整数类型变量可以存储的限制,并且需要了解为什么我得到这个结果(268,435,456=2^28)
public static void main(String[] args) {
int x = 16+256;
for( int i =0; i<6; i++) {
x*=16;
}
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
考虑一下所有以二进制表示的值的情况。
最初,x = 00000000000000000000000100010000。然后每次乘以 16 时,都会在右侧添加 4 个零,并从左侧删除 4 个数字。
所以你会得到像这样的结果
00000000000000000001000100000000
00000000000000010001000000000000
Run Code Online (Sandbox Code Playgroud)
等等。但是,一旦执行了 6 次,第一次1就会从数字的左端消失 - 这就是整数溢出。所以你只剩下
00010000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
这是 2 的 28 的结果。
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |