在C++中有可能因为数据的值超出了数据类型所表示的范围而造成错误地结果,下面来详细分析一下。
有如下代码:
short int a = 234;
short int b = 456;
short int c = 6;
cout << a * b / c;//结果为17784
如果short int占用2字节,int占用4字节。虽然short int为16位整数,但是由于该指令系统是32位,放在在32位的寄存器中进行计算,这样中间的结果234*456=106704不会溢出,最后的结果也是正确的。
如果上述的生成的指令是16位的机器代码,在16位的机器上进行运算,当计算234*456时,将会抛弃16位上的1,这样即使a、b和c为int类型,但是由于16位的编译器的int为16位,所以仍然会抛弃16位上的1,造成数据不准确。