this と読みました。 C++では8進数、Javaでは10進数です。しかし、Cに関する説明はありませんか?
0が8進数または10進数の場合、違いは生じますか?これは私のインタビュアーからの質問です。私はノーと言い、8進数でも10進数でも常に0であると説明しました。
次に、なぜC++では8進数、Javaでは10進数と見なされるのかと尋ねました。私はそれが標準だと言った。 Cで何を教えてください。違いはありますか?なぜ標準が異なるのですか?
ほとんど違いはありませんが、正式には整数定数0
はCでは8進数です。C99およびC11標準では、6.4.4.1整数定数
整数定数:
decimal-constant整数サフィックスopt
octal-constant整数サフィックスopt
hexadecimal-constantinteger-suffixoptdecimal-constant:
非ゼロ桁
decimal-constantdigit8進定数:
0
octal-constantoctal-digit16進定数:
...
...
それから彼は、なぜC++では8進数、Javaでは10進数と見なされるのかと尋ねました
完全を期すために、Java仕様にも言及する価値があります。 Java言語仕様3.10.1 から:
DecimalNumeral: 0 NonZeroDigit Digitsopt NonZeroDigit Underscores Digits
10進数は、整数のゼロを表す単一のASCII数字0、または1〜9のASCII数字で構成され、オプションで1つ以上のASCIIが続きます。アンダースコアが点在する0から9までの_数字。正の整数を表します。
OctalNumeral: 0 OctalDigits 0 Underscores OctalDigits
8進数は、ASCII数字0とそれに続くアンダースコアが散在する1つ以上のASCII数字0から7で構成され、正、ゼロ、または負の整数を表すことができます。
ご覧のとおり、裸の0
はdecimalと見なされます。一方、0
が前にある(空でない)数字のシーケンスは、octalと見なされます。
興味深いことに、その文法から:
0
は10進数です00
は8進数です8進数です。セクション6.4.4.1 Integer constants
N1570ドラフトの:
integer-constant:
decimal-constant integer-suffixopt
octal-constant integer-suffixopt
hexadecimal-constant integer-suffixopt
decimal-constant:
nonzero-digit
decimal-constant digit
octal-constant:
0
octal-constant octal-digit
hexadecimal-constant:
hexadecimal-prefix hexadecimal-digit
hexadecimal-constant hexadecimal-digit
hexadecimal-prefix: one of
0x 0X
nonzero-digit: one of
1 2 3 4 5 6 7 8 9
octal-digit: one of
0 1 2 3 4 5 6 7
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
integer-suffix:
unsigned-suffix long-suffixopt
unsigned-suffix long-long-suffix
long-suffix unsigned-suffixopt
long-long-suffix unsigned-suffixopt
unsigned-suffix: one of
u U
long-suffix: one of
l L
long-long-suffix: one of
ll LL
また:
- 10進定数はゼロ以外の数字で始まり、一連の10進数字で構成されます。 8進定数は、接頭辞0で構成され、オプションでその後に0〜7の数字のシーケンスのみが続きます。 16進定数は、プレフィックス0xまたは0Xの後に10進数のシーケンスと、それぞれ値10から15の文字a(またはA)からf(またはF)が続きます。
C標準から(6.4.4.1整数定数)
octal-constant:
0
octal-constant octal-digit
実際、ゼロは8進数、10進数、16進数の一般的な数字であるため、ゼロに違いはありません。数字に単一の(先頭の)ゼロ以外の桁がある場合にのみ意味があります。
10進数、8進数、16進数などの整数型がないことを考慮してください。