首頁 > 後端開發 > C++ > 為什麼前置零的數字在 C 中表現異常?

為什麼前置零的數字在 C 中表現異常?

Linda Hamilton
發布: 2024-12-02 22:43:12
原創
447 人瀏覽過

Why Do Zero-Prepended Numbers Behave Unexpectedly in C  ?

理解零前綴數字的特殊行為

經常觀察到,在某些程式語言(如C)中,以零開頭的數字會表現出意想不到的行為。讓我們深入研究您提出的具體場景,以理解這些怪癖。

考慮以下程式碼摘錄:

int i = 07;     // i == 7
int i = 16;     // i == 16
int i = 00016;  // i == 14, why?
int i = 05016;  // i == 2574, wow )
int i = 08;     // compile error, compiler expects octal number...
登入後複製

零數字和八進位解釋

在 C 中,整數文字可以用十進位、八進位或十六進位指定。前置零的整數通常被解釋為八進位文字,除非該文字以 0x 或 0X 開頭,這表示十六進位基數。

在您的範例中,00016 被解釋為八進位文字,導致 i == 14. 八進制數使用數字 0-7 表示值。前導零不會影響文字的值。

類似地,05016 也被解釋為八進位文字,可以透過將每個數字乘以適當的 8 次方來轉換為十進位。這給我們 i == 2574.

前導零和十六進位解釋

但是,如果文字以 0x 或 0X 開頭,則將其解釋為十六進位文字。十六進位數字使用數字 0-9 和字母 A-F(或 a-f)表示值。

在您的範例中,0x16 將被解釋為表示值 22 的十六進位文字。

八進制數字和語法錯誤

根據C標準,8和9無效八進制數字。因此,08 是無效的八進位文字,並會在編譯期間導致語法錯誤。

結論

您觀察到的前綴為零的數字的怪癖源自於解釋 C 中整數文字的特定規則。透過理解這些規則(即,除非另有說明,否則將前置零的整數解釋為八進位文字),您可以避免錯誤並正確處理整數值。

以上是為什麼前置零的數字在 C 中表現異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板