web-dev-qa-db-ja.com

符号付きバイナリと符号なしバイナリの違いは何ですか

私はいくつかのサイトを読んでいますが、それらのどれも私には意味がありません。符号付きおよび符号なしのバイナリは、符号付きおよび符号なしの変数と同じです。あなたが助けることができれば嬉しいです:)

8
R.M.R

「符号付き」インジケータは、アイテムが正または負の値を保持できることを意味します。 「符号なし」は、正の値と負の値を区別しません。符号付き/符号なし変数は、任意の数値データ型(バイナリ、整数、浮動小数点など)を参照できます。各データ型は、署名付きまたは署名なしとしてさらに定義できます。

たとえば、8ビットの符号付きバイナリは、正と負の両方の0〜127の値を保持できます(符号に1ビットが使用され、値に7ビットが使用されます)。 255(値が正であるか負であるかを区別するものはありませんが、通常は正と見なされます)。

署名済みバイナリは、署名付き変数の特定のデータ型です。

お役に立てば幸いです!

10
Joel Stanford

「符号付き」変数は、値が最上位ビット(左の最後のビット)を使用して正または負の値を保持することを意味します。これを「符号付きビット」と呼びます。 「符号なし」変数はそうではありませんが、代わりに最上位ビットは次の2のべき乗です。

1である符号付きビットを負の数と呼びますが、符号なしの数では、ビットは通常のバイナリビット規則に従います。

たとえば、最大値は次のようになります。
符号なしChar 0b11111111(16進数で0xFF)= 10進数で255、(128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255)
Signed Char 0b11111111(16進数で0xFF)= 10進数で-127、(-1 *(64 + 32 + 16 + 8 + 4 + 2 + 1)=-127)

さらに、コードに表示されるもの:
符号なし文字0b10000001(16進数で0x81)= 10進数で129、(128 + 1 = 129)
Signed Char 0b10000001(16進数で0x81)= 10進数で-1、(-1 * 1)

(注:charは1バイトです。つまり、変更可能な8桁のバイナリがあります)
(不思議に思っている人にとっては、0bはビットが2進数であることを意味し、0xは16進数であることを意味します)

1
Kenneth

符号付きおよび符号なしバイナリは、表されるバイナリの符号に依存する変換を指します。一方、変数については、変数に負の値を格納できるかどうかを示します。

符号付きビットのバイナリ:1は負で、0は正です。 2番目の例を見ると、最初のビットは1を意味していますか? -そう、ネガ。また、base2からbase10への変換には含めません。

例:1001 In Unsignedビット(符号を気にしない):9

例:1001 In Signedビット(MSBは符号ビット):-1

変数の場合、負の数が格納される可能性が非常に高くなります。

MSB:最上位ビット

0
Smit

位置または状況に依存します。例では、アセンブリで、バイトを持つ値をメモリから読み込みたい:0xFF(バイナリで〜11111111)。 $ s3にはこの値のアドレスがあります。

  • func lbu(load byte unsignal)を使用すると、非シグナルバイナリのロードのみが許可されます:lb rt、offset(rs)。

    • lbu $ s0、32($ s3):lbuは値をロードし、-extendを255として解釈される32ビット0x000000FFにロードします。
  • func addiを使用すると、信号バイナリをロードできます:lb rt、ofset(rs)。
    • lb $ s0、32($ s3):lbは値をロードし、-1と解釈される32ビット0xFFFFFFFFに1-extendをロードします.
0
ducPham