人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Pythonにおける2進数の扱いが変だと感じるのは私だけでしょうか。

4bitの3が0011なのに、4bitの-3が-011なのは何故…?
1011もしくは-0011ならまだ納得できるのですが…

●質問者: spendarmad
●カテゴリ:コンピュータ
✍キーワード:Python なのは 進数
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

[1]10進法の3を2進法で表すと11 nobnob3

だから下二桁が11になるのは疑いがありません。

4bit表示だとあと2bit使えるわけです。

そこの使い方が問題なんでしょう。

4bitの一番左を符号として、0なら+、1なら-とすると

10進法の3と-3はそれぞれ0011、1011になるはずです。

ところが実際は、それぞれ0011,-011になっています。

しかし-011のーの所が0でも1でもないーになっているので、

この時点で2進法でないことになりますね。


[2]マイナスには2の補数を使うので den2sn

4bitの場合、表せる範囲は

7?-8 (0111?1000)です。


2進数では先頭のビットを符号として利用するのですが

パソコンではマイナス値を2進数で扱う場合は2の補数を利用します。

それは引き算を足し算で行えるようにするためにそうなっています。


実際には-3は4bitの2進数で1101となるわけですが、

わかりにくいので-011と書く方式を許容しているのだと思います。


「1011」では10進数だと-5となってしまいますし

「-0011」と書いてしまうと-1111等と書けてしまうため

実質5bit必要になるかと思います。


[3]3は、unsigned intだから? ku__ra__ge

3は符号なし整数(c言語で言うunsigned)として変換するため絶対値が4桁で、

4ビットの符号あり整数は-8?7の数を表現することが出来ますが、

この際に絶対値の部分は下位3ビットで表現されることになります。


余談ですが、コンピュータの中では符号付きの整数は2の補数という方法で表現され、

この表現では-3は1011ではなく1101になります。なんでこんな判り難い表現がされるかというと、

負数の足し算がそのまま実行できるからです。

例: 5(0101) + -3(1101) = 2(10010) ※4ビットの計算なので5ビット目は無視する

詳しくはwikipediaなどを参照してください。


[4]マイナス(数値演算子の符号反転) と 0011 heke2mee

-3は2進数では 1101 です。2進数の0011は 011または11と書いてもOKだと思います。-011は - 0011 と同じなので

マイナス(数値演算子の符号反転) と 0011で結果-3となるのではないでしょうか

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ