仕様はここにある https://dlang.org/spec/lex.html#Integer
これをみると、 0b_
はBinaryIntegerとして表現可能なリテラルとなる。
import std.stdio; void main() { writeln("0b_: ", 0b_); writeln("0b________: ", 0b________); // _ がいくつあってもよい }
結果は _
が何個あっても0になる。
(dmd-2.076.1)$ rdmd bin.d 0b_: 0 0b________: 0
しかし、 BinaryIntegerは 0b
だけでも評価できてしまう。そのためこんなコードもコンパイルが通ってしまう。
import std.stdio; void main() { writeln("0b: ", 0b); writeln("0buL: ", 0buL); }
結果はやはり0となる。
(dmd-2.076.1)$ rdmd bin.d 0b: 0 0buL: 0
また、 0x_
は HexadecimalInteger として表現できないリテラルであるが、実際にはコンパイルできてしまう。
import std.stdio; void main() { writeln("0x_: ", 0x_); }
0b_
同様、結果は値0となる。
(dmd-2.076.1)$ rdmd hex.d 0x_: 0
こちらも 0x
や 0xuL
のようなコードが実行できる。
import std.stdio; void main() { writeln("0x: ", 0x); writeln("0xuL: ", 0xuL); }
結果:
(dmd-2.076.1)$ rdmd hex.d 0x: 0 0xuL: 0