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

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

Barbara Streisand
Barbara Streisand原創
2024-12-07 14:50:17507瀏覽

Why Do Zero-Prefixed Numbers Behave Unexpectedly in C  ?

理解零前綴的數字及其意義

在程式設計領域,以零開頭的數字可以表現出有趣的行為。讓我們使用 Visual Studio 2013 中的範例深入研究具體細節。

考慮以下程式碼片段:

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...

零字首數字的特殊處理

編譯器對零字首數字的解釋不同,具體取決於context:

  • 十進制數字(基數為10): 當零前綴數字僅包含 0 到 7 的數字時,它被解釋為十進制數字。例如,07 相當於 7。
  • 八進位數(基數 8): 若零前綴數字包含數字 8 或 9,則視為八進位數。但是,請注意,根據 C 標準,這是無效的用法。
  • 十六進位數字(基數 16):以 0x 或 0X 開頭的零前綴數字解釋為十六進位數字。

00016 和的異常行為05016

分值int i = 00016;解析為i == 14,因為編譯器將前賦零視為額外的零導零導八進制數字,即使這根據C 標準是無效的。

類似地, int i = 05016;產生 i == 2574,因為編譯器將其解釋如下:

  • 050 被視為八進位 50。
  • 16 被視為十進位 16。
  • 結果計算公式為(50 * 8) 16 = 2574.

08 編譯錯誤

以0 開頭後接0-7以外的數字(例如08)的整數文字會觸發編譯錯誤,因為編譯器期望它是八進制數,但 8 不是有效的八進制數字。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn