Javaにおけるbyteタイプの初期化
1228 ワード
早いうちに仕事でJavaに少し触れたことがあるので、この穴ができて、今日振り返って自分がStackoverflowで提起した問題を見つけて、それを記録しました.
使用中はbyteタイプの各ビットを1にする必要があります.このような簡単な操作がJavaに様々な制約があるとは思わなかった.
まずコードを見てみましょう.
上記のどの方式がbyteタイプの一人一人を1にする需要に達することができますか?答えは2,3です.
どうして方式1がいけないのですか.
Javaでは、整数字面量(literal integers)は、固定された符号付き32ビット整数で表されるからである.byteタイプはJavaではシンボル付きの8ビットタイプで、10進数
どうして方式2がいいですか.
どうして方式3でいいですか.
Javaでは、整数字面量(literal integers)は、固定された符号付き32ビット整数で表されるからである.さらに採用する補符号の形式では、
穴は2つあると思います.なぜbyteタイプはJavaで Javaのタイプシステムはあまりにも柔軟ではありません.人のSwiftのliteral を見てみましょう.
使用中はbyteタイプの各ビットを1にする必要があります.このような簡単な操作がJavaに様々な制約があるとは思わなかった.
まずコードを見てみましょう.
// 1
byte allBitsOne = 0xFF;
// 2
byte allBitsOne = (byte)0xFF;
// 3
byte allBitsOne = 0xFFFFFFFF;
上記のどの方式がbyteタイプの一人一人を1にする需要に達することができますか?答えは2,3です.
どうして方式1がいけないのですか.
Javaでは、整数字面量(literal integers)は、固定された符号付き32ビット整数で表されるからである.byteタイプはJavaではシンボル付きの8ビットタイプで、10進数
-128~127
を表す.したがって、0xFF
が表す十進法255
はbyteタイプの表現の範囲を超えている.どうして方式2がいいですか.
0xFF
という32ビット整数型では、下位8ビットはいずれも1なので、今は(byte)
で強制的に変換して、余分な高位を捨てて、残りの8ビットはすべて1のbyteで左に割り当てます.どうして方式3でいいですか.
Javaでは、整数字面量(literal integers)は、固定された符号付き32ビット整数で表されるからである.さらに採用する補符号の形式では、
0xFFFFFFFF
に対してその表す数の絶対値が + 1
であり、絶対値が1であることがわかり、最高位がシンボルビットであることから-1
を表し、byteタイプによってJavaで-128~127
を表すことができるので、付与することができ、-1
はbyteタイプではそれぞれ1
です.穴は2つあると思います.
Int8
ではなくUInt8
に設計されるのですか?