乘以两个字节数

Cat*_*ysm 4 java byte

有人请解释一下.为什么以下程序产生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)

Sky*_*Sky 11

整数溢出问题.

60*60 = 3600,二进制形式为111000010000.

byte是8位数据格式.因此,它将截断为8位数据,相当于00010000,十进制为16.希望这能回答你的问题.


Joj*_*dmo 7

这是因为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.