有人请解释一下.为什么以下程序产生16?
public static void main(String[] args) {
byte b1 = 60, b2 = 60;
byte product = (byte) (b1 * b2);
System.out.println(product);
}
Run Code Online (Sandbox Code Playgroud)
这是因为a byte只能存储从-128to到的数字127,并且60 * 60 = 3,600超过字节的最大存储空间,因此会产生Integer Overflow错误.要解决此问题,您可以使用:
public static void main(String[] args) {
byte b1 = 60, b2 = 60;
int product = b1 * b2;
System.out.println(product);
}
Run Code Online (Sandbox Code Playgroud)
字节可以有8位(二进制数字),3600是111000010000二进制形式.(12位),因此,开头的4个额外位被丢弃,因此它可以适合一个字节,改变二进制00010000代替111000010000,而00010000 2 = 16 10,所以你得到输出16而不是所需的3600.