1

ここでこの答えを理解しようとしています。

0xf2これらと0xfffffff2値の両方がどのように表され-14ますか? 変換プロセスについて詳しく教えてください。

ただし、2の補数とは何かは知っています。

4

3 に答える 3

3
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

于 2012-11-13T21:30:28.147 に答える
2

2進数では、2の補数を使用する場合、負の値の最上位ビットは1に設定されます。これは、ビット数の数によって異なります。

0xf28ビットの符号付き値として解釈されるのは-14ですが、0xfffffff232ビットの符号付き値として解釈されるのは-14と同じです。

32ビットは242であり、符号なし8ビット0x000000f2と同じです(注:Javaには符号なし整数型はありません)。0xf2

于 2012-11-13T21:33:17.683 に答える
0

これらの 0xf2 と 0xfffffff2 の値はどのように -14 を表していますか?

彼らはしません。

int a = 0xf2;
int b = 0xfffffff2;

異なる値です。それらが同じ数を表す唯一のケースは次のとおりです。

byte a = (byte)0xf2;
byte b = 0xfffffff2;

これは、バイトが整数コンテキストで使用される場合の符号拡張のためです。ご了承ください

byte a = 0xf2;

コンパイルさえしないので、あなたの質問が本当に何についてのものかを理解するのは難しいです.

于 2012-11-14T02:24:16.057 に答える