2017-03-17 462 views
2

標準(標準中是否存在差異?)有關將浮點數分配給此整數的整數範圍的說法?將大浮點數存儲爲整數(cast和not cast)

因此,什麼應該發生在這裏, 假設16位的短,以保持一些小(USHRT_MAX == 65535)

float f = 100000.0f; 
short s = f; 
s = (short) f; 
unsigned short us = f; 
us = (unsigned short) f; 

回答

5

這是不確定的行爲(沒有診斷的要求)。見C11 6.3.1.4(早期標準具有類似的文字):

當真實浮動類型的有限值被轉換爲,小數部分被丟棄(即,值被截斷朝向比_Bool以外的整數型零)。如果整數部分的值不能用整數類型表示,則行爲是未定義的。

因此,假設你的系統有USHRT_MAX65535short s = f;和所有後續行導致不確定的行爲。