3

このコードを考えると:

#include <stdio.h>

int main (void)
{
    int x = 5;
    double y = 6;
    int z = x+y;

    printf("size of z = %d bytes",sizeof(z));
    return 0;
}

ラインで何が起こるかを正しく説明しているロジックはどれint z = x+yですか?

  • 5 (整数、4 バイト) + 6 (倍精度、8 バイト)
  • それらを追加するときにint変換する( )double
  • 5.0 (double、8 バイト) + 6.0 (double、8 バイト)
  • 11.0 (ダブル、8 バイト)
  • しかし!zはタイプintなので、に変換されませんdouble
  • 11.0 は 11 に変換されます。これzは ... がint!
    「倍精度浮動小数点形式」を読めば、その理由がわかります。
  • したがって、 z = 11 (zは typeintであるため、サイズは4バイトです)
  • これが 8 バイトではなく 4 バイトです。;)

また

  • 5 (整数、4 バイト) + 6 (倍精度、8 バイト)
  • doubleそれらを追加するときに変換intする () 暗黙の変換
  • 5 (整数、4 バイト) + 6 (整数、4 バイト)
  • 11 (整数、4 バイト)
4

3 に答える 3

5

これはwww.tutorialspoint.com/cprogrammingから取った写真で、私の長い答えの代わりになります:

「コンパイラは最初に整数昇格を実行します。オペランドがまだ異なる型を持っている場合、それらは次の階層で最上位に表示される型に変換されます:」

通常の算術変換

于 2013-08-15T08:56:15.840 に答える
4

最初の1つ。double計算を実行するために変換されint、割り当てを実行するために変換されます。

于 2013-08-15T08:54:04.900 に答える
1

sizeof(z)is 4 because sizeof(int)is 4 - 何に割り当てようとしても問題ありませんz。これは、型変換がどのように行われるかとはまったく別の問題です。

于 2013-08-15T08:56:07.887 に答える