int a 020的奇怪輸出 是16

2021-10-19 13:05:10 字數 1140 閱讀 4520

乙個朋友問了我這樣乙個問題:為什麼a的輸出結果是16?

#include

intmain()

在這裡插入**片

我要求對方改變a的值為20的時候,輸出又是正常的20,這讓我有些奇怪,於是對她說我不知道。

這幾天在網路上到處亂逛,倒是看到了這個知識點。

首先,當我們定義乙個數字的時候,int a=020,實際上是定義了乙個八進位制的數字20,當使用%d輸出的時候,實際上是按照十進位制的模式輸出八進位制的數字20,計算機會自動地將八進位制的20轉化為十進位制的16,這就是為什麼int a=20的時候,用%d輸出是20;而用int a=020的時候,輸出的是16的緣故。

在c語言中,有十進位制,八進位制和十六進製制可以定義,十進位制不用任何特別地表示就是乙個十進位制的數字,例如int a=11,用%d輸出的就是乙個十進位制的11,八進位制則需要在數字前面新增乙個0,用八進位制來表示十進位制的11,則需要int a=013;十六進製制同理,但是十六進製制的0變成了

輸入0x,例如十進位制的十七,用十六進製制表達起來就是int a=11;

前一段時間我在處理文字輸入輸出的時候,為了數字的對齊,經常會使用%02d這種格式輸出數字,這個的問題在於,當我使用乙個讀取文字的時候,數字會被識別為十六進製制嗎?

結果測試,能力有限,我只能使用如下**獲取文字中的資料,文字資料如下:

01 01

1 101 1

22 022

**如下:

#include #include #define max_line 1024

int main()

while(fgets(buf,max_line,fp) != null)

return 0;

}使用這個格式讀取

![在這裡插入描述](

,當使用%s %s讀取輸出的時候,則是正常的。

int a和 int a的區別

cpp view plain copy include include include using namespace std intmain int a static cast a int a reinterpret cast a int a 不經過轉換,直接得到a在記憶體單元的值,並將其轉換成整...

int a和 int a的區別

先從一到面試題說起 includeusing namespace std int main 輸出結果為 0 0 5 66在上面已經知道float型125.5在記憶體中存放方式為 00000000 低位址 00000000 11111011 01000010 高位址 因此對於p和p 1指向的單元,其中...

int a和 int a的區別

float a 1.0f cout int a endl cout int a endl cout boolalpha int a int a endl 1 輸出什麼?float b 0.0f cout int b endl cout int b endl cout boolalpha int b ...