簡體   English   中英

0 是十進制文字還是八進制文字?

[英]Is 0 a decimal literal or an octal literal?

零總是零,所以沒關系。 但在最近與一位朋友的討論中,他說八進制文字今天幾乎沒有使用。 然后我突然意識到,實際上我的代碼中幾乎所有的 integer 文字都是八進制的,即0

根據 C++ 語法, 0是八進制文字嗎? 標准是怎么說的?

我知道的唯一真正用途是 unix 文件權限。

是的, 0是C ++中的八進制文字

根據C ++標准:

2.14.2整數文字[lex.icon]

integer-literal:  
    decimal-literal integer-suffixopt  
    octal-literal integer-suffixopt  
    hexadecimal-literal integer-suffixopt  
decimal-literal:  
    nonzero-digit  
    decimal-literal digit  
octal-literal:  
    0                           <--------------------<Here>
    octal-literal octal-digit

前綴為0任何整數值都是八進制值。 即:01是八進制1,010是八進制10,是十進制8,0是八進制0(十進制,任何其他,0)。

所以是的,'0'是八進制。

這是@ Als答案中語法片段的簡單英文翻譯:-)


前綴為0x的整數不帶前綴0 0x是明確不同的前綴。 顯然有些人無法做出這種區分。

按照同樣的標准,如果我們繼續:

 integer-literal:
     decimal-literal integer-suffixopt
     octal-literal integer-suffixopt
     hexadecimal-literal integer-suffixopt
 decimal-literal:
     nonzero-digit                       <<<---- That's the case of no prefix.
     decimal-literal digit-separatoropt digit
 octal-literal:
     0                                    <<<---- '0' prefix defined here.
     octal-literal digit-separatoropt octal-digit <<<---- No 'x' or 'X' is
                                                          allowed here.
 hexadecimal-literal:
     0x hexadecimal-digit                 <<<---- '0x' prefix defined here
     0X hexadecimal-digit                 <<<---- And here.
     hexadecimal-literal digit-separatoropt hexadecimal-digit

顯然,所有以零開頭的整數文字實際上是八進制的。 這意味着它也包含0。 由於零為零,這幾乎沒有區別。 但不知道這個事實會傷害你。

當我試圖編寫一個程序來將二進制數轉換為十進制和十六進制輸出時,我意識到了這一點。 每當我給出一個以零開頭的數字時,我得到的輸出錯誤(例如,012 = 10,而不是12)。

知道這些信息是很好的,這樣你就不會犯同樣的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM