勿以小杯盛大物
赋值时要保证值的类型与保存它的变量类型相匹配。
不同数据类型的大小不同,千万别让值的大小超过变量。short
比int
的空间小,int
又比long
小。
完全可以在int
或long
变量中保存short
值。因为变量有足够的空间,你的代码将正确运行:
但是反过来,比如你想在short
变量中保存int
值,就不行。
有时,编译器能发现你想在小变量中保存大值,然后给出一条警告,但大多数情况下编译器不会发现。这时当你运行代码,计算机无法在short
变量中保存100 000。计算机能装多少0、1就装多少,而最终保存在变量y
中的数字已面目全非:
y的值是 = -31072
百宝箱
为什么把一个很大的数保存到
short
中会变成负数?数字以二进制保存,二进制的100 000看起来 像这样:
- x <- 0001 1000 0110 1010 0000
当计算机想把这个值保存到
short
时,发现只能保存2个字节,所以只保存了数字右半边:
- y <- 1000 0110 1010 0000
最高位是1的二进制有符号数会被当成负数处理,它等价于下面的十进制数:
- -31072