2の補数はどのように機能しますか?例えば:
5: 00000101
-5 (two's complement): 11111011
後者が251であるか-5であるかをどうやって見分けることができますか?
2の補数はどのように機能しますか?例えば:
5: 00000101
-5 (two's complement): 11111011
後者が251であるか-5であるかをどうやって見分けることができますか?
それらは両方であり、どれもありません。11111011
は単なるビット パターンです。算術演算などの操作で使用される場合、固有の意味を取得するだけです。
使用する演算によって、解釈が異なる場合とそうでない場合があります。2 の補数が使用される理由は、たとえば整数演算では、符号付きまたは符号なしとして解釈しても、演算のビットパターンの結果が正しいためです。
できません!これが、多くの言語が符号付きおよび符号なしの型を持っている理由です。そのため、コンパイラ/インタプリタは、バイナリ値を符号付き(2の補数)として解釈するか、符号なしとして解釈するかを認識します。
2 の補数をよりよく理解するには、ウィキペディアのページをご覧ください。
ビット列の解釈は、そのデータを使用する命令によって異なります。変数を符号なしとして宣言すると、そのビットは通常の 2 進数として解釈されます。それ以外の場合、符号付き変数として宣言すると、2 の補数値として解釈されます。
符号付き整数の場合、最上位ビットが符号ビットとして機能します。符号ビットが 0 の場合、数値は正です。符号ビットが 1 の場合、数値は負であり、2 の補数形式で表され、コンパイラはこれらの負の整数を処理するために 2 の補数演算を行います。
ただし、「unsigned int」として明示的に宣言された符号なし整数の場合、符号ビットも 2 の補数解釈もありません。
したがって、signed 8 bin int 11111011 は 5 の 2 の補数であるため、-5 を表しますが、unsigned 8 bit int 11111011 は 251 です。