經常觀察到,在某些程式語言(如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中文網其他相關文章!