一定のフロートを鋳造し、このコードを見てください:は、暗黙的に
#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;
}
それのように出力を与えた:それは32767とない160だからこそ、最後の行で
sizeof(short) = 2
s = 160
s = 160
s = 160
s = 32767
? f = 65696.0F; s = f;
とs = 65696.0F;
の違いは何ですか?
+1。具体的には、6.3.1.4/1:* "実浮動型の有限値を_Bool以外の整数型に変換すると、小数部は破棄されます(つまり、値はゼロに切り捨てられます)。部分は整数型で表現することはできませんが、その振る舞いは未定義です)」* – Jon
@Jonなぜ、私は 'f = 65696.0F; s = f'? – rootkea
@rootkeaこれは未定義の動作でもあり、未定義の動作は予期しないことがあります。 – ouah