2017-08-05 10 views
-1

出力が期待どおりでない理由を説明できる人はいますか? 私は16を期待したが0から始まる14Intプログラムのデータ型が予期しない出力になる可能性があります。

#include<stdio.h> 

int main() 
{ 
    int x=016; 
    printf("%d",x); 
    return 0; 
} 
+4

「016」は、8進数を意味します。 – BLUEPIXY

+1

何が期待されましたか? – chux

+0

あなたは16を期待していましたが、14がありましたか? –

答えて

3

数値リテラルは8進数として解釈されました。

6.4.4.1整数
3定数...進定数は、任意の数字のみ0〜7のシーケンスが続く接頭辞0から成ります。 ...

例:016(8塩基)==>0×8^2 + 1×8^1 + 6×8^0 ==> 0 + 8 + 6 ==>14(10塩基)

は、intの値を10個のベースで出力するので、結果は14です。

%oを使用してintを8進数として出力すると、16が得られます。

例えば

int x = 016; 
printf("%#o", x);//016 

したい場合は3桁との結果が%d

printf("%03d", 16);//016 

を使用して0をリードするフォーマット文字列の詳細については、printfのリファレンスを参照してください含まれています。

関連する問題