質問: 0b1000_0000; ``` 2進数で「10000000」は「-128」である為、byte型の範囲内であるように思えます。 バイナリリテラルでは最上位ビットは符号として扱われないという認識でよろしいのでしょうか? 恐れ入りますが、ご教示頂けますと幸いです。
回答: > > 2進数で「10000000」は「-128」である為 > > > いえ、それは128を意味します。10000000が-128を意味するためにはその二進数が「8bitの符号付き」という前提が必要ですが、Javaの整数リテラルにはそういう前提はありません。 0b...とか0x...というのは結局のところ「intのリテラル表現の一つ」なので「32bitの符号付整数として解釈される」のです。 そういう意味で `short s = 0b1000_0000_0000_0000;` も同様にNGになります。 しかし「32bitの符号付整数の表現である」という前提があるため `int i = 0b10000000_00000000_00000000_00000000;` と書くと右辺は負の数として解釈されこの行は正当と見做されます。 「だったら `byte b = 0b1000_0000B;` みたいな表現を許してくれればいいのに!」 と思われるかも知れません。それはそうかも知れないのですが残念ながらJavaにはそういう表現法はサポートされてません・・・