1

私はこの単純なCプログラムを試して数値を割ろうとしています..

void main()
{
 int i,j,k;
 i=00126;
 j=2;
 k=i/j;
 printf("%d",k); 
}

出力が 63 ではなく 43 として表示されます。別の 0 を

i=000126;

現在、不正な 8 進数としてエラーが発生しています。

私がしようとしているなら

i=00000001000; 

エラーは表示されず、結果は 256 になります。この予期しない出力について理解できませんでした。なぜこのような出力が生成されるのか、誰にも言えますか?

明確な説明をいただければ幸いです。

編集:私が試した場合

 int i,j,k;
 i=1000;
 j=0002;
 k=i/j;
 printf("%d",k); //which gives 500 as result
4

4 に答える 4

4

C では、 で始まる数値は 10 進数で0はなく、基数 8 (8 進数) です。したがって、あなたの数0126は確か86に10進数です。

この件に関しては、 で始まる数字0xも 16 進数 (基数 16) です0x1a5

于 2013-02-08T12:41:37.857 に答える
2

C0 で始まる数値リテラルはすべて8 進数です。

つまり、(0126)8 進数 = (86)10 進数です。

編集

コメントに基づいて、数値の位置表記に関する記事をご覧ください。

于 2013-02-08T12:41:47.080 に答える
1

00126 は 8 進数 (64 + 2*8 + 6 = 86) として読み取られます。したがって、43 が正しいです。10 進数の 126 が必要な場合は、126 と書きます。

于 2013-02-08T12:42:54.407 に答える
0

整数の前に a を付けると0、8 進数 (基数 8) として解釈されます。したがって、0126 は実際には 86 です。

于 2013-02-08T12:41:46.810 に答える