請看看下面的代碼:隱式鑄造浮動常數
#include <stdio.h>
int main(void)
{
short s;
int i = 65696;
float f = 65696.0F;
printf("sizeof(short) = %lu\n", sizeof(short));
s = i;
printf("s = %hd\n", s);
s = f;
printf("s = %hd\n", s);
s = 65696;
printf("s = %hd\n", s);
s = 65696.0F;
printf("s = %hd\n", s);
return 0;
}
它給作爲輸出:
sizeof(short) = 2
s = 160
s = 160
s = 160
s = 32767
在最後一行爲什麼它是32767,而不是160?說f = 65696.0F; s = f;
和s = 65696.0F;
有什麼區別?
+1。具體而言,6.3.1.4/1:*「當實際浮點類型的有限值被轉換爲除_Bool以外的整數類型時,小數部分被丟棄(即該值被截斷爲零)。如果整數部分不能用整數類型表示,行爲是不確定的)「* – Jon 2013-02-08 14:21:32
@Jon爲什麼當我說'f = 65696.0F; s = f'? – rootkea 2013-02-08 14:22:40
@rootkea這是未定義的行爲,以及是未定義的行爲可能是不可預測的。 – ouah 2013-02-08 14:24:31