- 締切済み
2進数、2の補数について
負の表現を2の補数とすると、4ビットで扱うことができる整数の範囲は、10進数で○~○である。 という問題がわかりません。 答えは-8~7とあるんですが・・・。 冬休みに入って先生に聞けないので、どなたか教えて頂ければと思います。 どうぞアドバイスよろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- issa_srv
- ベストアンサー率44% (40/89)
コンピュータでは0と1で全ての数字を表現します。 文字列の1ビット目をプラス(0)/マイナス(1)として見て下さい。 0XXX(プラス) 1XXX(マイナス) となります。 ◎プラス表現の例 0111 = 7 一桁目が「0」なのでそのまま2進数で7をあらわしています。 ◎マイナス表現の例 1111 = -1 一桁目が「1」なのでマイナスをあらわしています。 そのまま数えると「-7」に見えませんか? ですが、それは違うのです。 一桁目が1の場合は「反転して1を足す」ことが必要です。 1111 0000(1を0に反転) 0001(1を足す) 「-1」を表していることがわかります。 非常に簡単なので、いろいろな数値を試してみてください。
2の補数を使う場合、 一番上のビットは、+または-を表す記号として使用します。 1ならマイナスの値を表現し、0ならプラスの値を表現します。 つまり、実際に数値を表現するためには、残りの3ビットを使います。 2の補数は、その値をプラスで表現した場合の2進の値(以下のA)の 0と1とを入れ替えて(以下のB)、その値に1を加えると出ます(以下のC) A B C -8 1000 → 0111 → 1000 -7 0111 → 1000 → 1001 -6 0110 → 1001 → 1010 -5 0101 → 1010 → 1011 -4 0100 → 1011 → 1100 -3 0011 → 1100 → 1101 -2 0010 → 1101 → 1110 -1 0001 → 1110 → 1111 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 以上のとおり、マイナスの値は先頭が「1」で プラスの値は先頭が「0」になります。 つまり、2の補数で表現できるのは、 ■マイナス側: 2進数で一番上の桁だけが1で 残りはすべて0の場合に表現できる10進数の「プラス」の数を マイナスにした値 # 今回は「1000」(2進)=「8」(10進) # つまり -8 になる。 ■プラス側: 全ビット数(今回は4ビット)から1を引いた数(今回は3ビット)で 表現できる10進数 # 今回は「0111」(2進数)=「7」(10進) # つまり 7 になる。 ということでご理解いただけたでしょうか? 私も昔、情報処理技術者試験のために勉強しました。 がんばってくださいね。
- bungosuidou
- ベストアンサー率25% (15/60)
4ビットでは16個の数値を表現することができる 16個の数値を全て非負の値にすると0から15までが表現できる 16個の数値で正負の値を扱いたい場合は0を境にして±8までだとわかりやすいけど、残念ながら0が真ん中にいるからどうしても±7までしか表現できない。 ところが、±7の範囲だと0を含めて全部で15個の数値表現だから、さらにひとつ欲張って負の数値は-8から正の数値は7までで我慢しようというのが この答えです じゃあ、2の補数ってなんなのさ?ってのが次の話題で 2進数で正負の区別をするときに一番先頭のビットを符号ビットと考えると、左が10進数、右が4ビットの2進数として次の3通りの表現方法が考えられる 0は単純に0000として話を進める 1)先頭ビットを符号ビットにして正負を区別する方法 1は0001 -1は1001 7は0111 -7は1111 2)正の数値のビットを反転したものを負の数とする方法 これは1の補数表現 1は0001 -1は1110 7は0111 -7は1000 3)正の数値のビットを反転してさらに1を加えたものを負の数とする方法 これが2の補数表現 1は0001 -1は1111 7は0111 -7は1001 16通りの数値を10進数と2進数で順に並べて比べてみると法則がわかる思います あとは2の補数などでググって調べてください
- JAWS55
- ベストアンサー率38% (176/452)
http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm このページを見て考えてください。 4ビットですから表せる整数は16個です。 最上位ビットが0の場合が正ですから、残りの3ビットで表せる最大の整数は?