10

このコードを見てください:

#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

最後の行で、なぜ 160 ではなく 32767 なのですか? f = 65696.0F; s = f;と言う はどう違いs = 65696.0F;ますか?

4

2 に答える 2

13

float 値の整数部分が新しい型で表現できない場合、変換は未定義の動作になるためです。

あなたの場合、SHRT_MAXおそらく 32767 であるため、の整数部分はオブジェクト65696.0Fで表現できません。short

于 2013-02-08T14:19:40.993 に答える