勿以小杯盛大物

赋值时要保证值的类型与保存它的变量类型相匹配。

不同数据类型的大小不同,千万别让值的大小超过变量。shortint的空间小,int又比long小。

勿以小杯盛大物 - 图1

完全可以在intlong变量中保存short值。因为变量有足够的空间,你的代码将正确运行:

勿以小杯盛大物 - 图2

但是反过来,比如你想在short变量中保存int值,就不行。

勿以小杯盛大物 - 图3

有时,编译器能发现你想在小变量中保存大值,然后给出一条警告,但大多数情况下编译器不会发现。这时当你运行代码,计算机无法在short变量中保存100 000。计算机能装多少0、1就装多少,而最终保存在变量y中的数字已面目全非:

  1. y的值是 = -31072

勿以小杯盛大物 - 图4百宝箱

为什么把一个很大的数保存到short中会变成负数?数字以二进制保存,二进制的100 000看起来 像这样:

  1. x <- 0001 1000 0110 1010 0000

当计算机想把这个值保存到short时,发现只能保存2个字节,所以只保存了数字右半边:

  1. y <- 1000 0110 1010 0000

最高位是1的二进制有符号数会被当成负数处理,它等价于下面的十进制数:

  1. -31072