C++中間結果溢出

在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,造成數據不準確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章