ここでこの答えを理解しようとしています。
0xf2
これらと0xfffffff2
値の両方がどのように表され-14
ますか? 変換プロセスについて詳しく教えてください。
ただし、2の補数とは何かは知っています。
ここでこの答えを理解しようとしています。
0xf2
これらと0xfffffff2
値の両方がどのように表され-14
ますか? 変換プロセスについて詳しく教えてください。
ただし、2の補数とは何かは知っています。
0xf2 = 11110010
最初のビットは sign-bitです。なので符号はマイナスです。実際の値を取得するには、2 の賛辞を取得します。
11110010 -> 1's complement -> 00001101 -> Add 1 -> 00001110 = -14
同様に、 を取る0xfffff...f2
。先頭に符号ビット。2 の補数を取ります。
1111-1111-1111.....0010 -> 1's complement -> 00000000000...1101 -> Add 1 -> 0000...1110 -> -14
1111...
先行する任意の数は、正の値の場合と同様に、負の符号付き数値の値に影響を0000..
与えません。
上記の計算は、どちらが数学的に等しい8-bit signed 0xf2
かに対するものです。32-bit signed 0xfffffff2
2進数では、2の補数を使用する場合、負の値の最上位ビットは1に設定されます。これは、ビット数の数によって異なります。
0xf2
8ビットの符号付き値として解釈されるのは-14ですが、0xfffffff2
32ビットの符号付き値として解釈されるのは-14と同じです。
32ビットは242であり、符号なし8ビット0x000000f2
と同じです(注:Javaには符号なし整数型はありません)。0xf2
これらの 0xf2 と 0xfffffff2 の値はどのように -14 を表していますか?
彼らはしません。
int a = 0xf2;
int b = 0xfffffff2;
異なる値です。それらが同じ数を表す唯一のケースは次のとおりです。
byte a = (byte)0xf2;
byte b = 0xfffffff2;
これは、バイトが整数コンテキストで使用される場合の符号拡張のためです。ご了承ください
byte a = 0xf2;
コンパイルさえしないので、あなたの質問が本当に何についてのものかを理解するのは難しいです.