0

コンピュータが通常計算に使用するバイト数について質問があります。まず、以下のソースコードを見ていただきたい。

ソースコード

printf("%d\n", sizeof(444444444));
printf("%d\n", 444444444);

printf("%d\n", sizeof(4444444444));
printf("%llu\n", 4444444444);

出力

4
444444444
8
4444444444

ご覧のとおり、コンピューターは決して価値を失うことはありません。大きすぎて int に収まらない場合は、コンピューター自体が自動的にその型を拡張します。コンピューターが値を決して失わない理由は、少なくとも 8 ビット コンテナーよりも大きい大きな型で動作するためだと思います。

全体の仕組みを教えてください。よろしくお願いいたします。

4

1 に答える 1

2

これは「コンピュータの計算能力」とは関係ありません。

あなたの例は、コンパイル段階で扱っている整数リテラルのサイズに関するものです。ほとんどのプラットフォームのintは4 バイト (32 ビット) です。これの最大値は 0x7FFF_FFFF または 2147483647 です。 An の最大値は0xFFFF_FFFF または 4294967295 です。unsigned int

コンパイラは通常int、ほとんどの整数リテラルに対してデフォルトを設定します (4 バイトの例と同様)。次の値は 0x1_08e8_d71c で、これは には大きすぎるintため、リテラルは 8 バイトのリテラル に昇格されますlong long

これはおそらく、ほとんどのコンパイラでの警告です。

GCC (32 ビット モードの場合) は4 バイトしかない-m32ため、次の警告を表示します。long

警告: 'long' タイプには整数定数が大きすぎます

出力

sizeof(int)=4, sizeof(long)=4, sizeof(long long)=8

ただし、64 ビット モードでは、( ) GCCは 8 バイト-m64なのでクールです。long

sizeof(int)=4, sizeof(long)=8, sizeof(long long)=8

これを解決するには、次のLLサフィックスを使用する必要があります。

long long val = 4444444444LL;
于 2013-04-23T04:40:11.823 に答える