こんにちは。
8ビットマイコンで、
127=B'01111111'の2の補数
B'10000001'は-127を
表します。
しかし、8ビットマイコンで、
マイナスを扱うのは、-127~127で
先頭一桁は正負を表すので
使えない、と説明されています。
しかし、
255=B'11111111'の2の補数を、
B'00000001'を-255としても、
問題ないのでは、ないでしょうか。
両者を足せば、0になります。
先頭ビットを使ってはいけない理由は、
何でしょうか。
(127までなら、マイナスは先頭
ビットが、0になる。分類に便利、
というなら、分かりますが)。
何か分かる人がいましたら、
よろしくお願いします。
No.6
- 回答日時:
No.5の回答者です。
失礼しました,No.5の前半の文章は無視していただけますか。
255=B'11111111'の【全ビット反転して+1だから】
B'00000001'を-255としても、問題ないのでは?
と質問者はおっしゃりたかったのだと,いま読み直してみて気づきました。
その考え方は正しいです。
ただ問題となるのは,-255~255という全整数の個数が「2の8乗」個で収まらないという,No.5の後半で述べたことだけです。
ですから1bit増やして9bit長にするだけで,その2の補数計算はそのまま通用します。
011111111 = +255
+ 100000001 = -255
----------
1)000000000 = 0
No.5
- 回答日時:
>255=B'11111111'の2の補数を、
>B'00000001'を-255としても、
>問題ないのでは、ないでしょうか。
>両者を足せば、0になります。
そもそもの勘違いはこれでしょう。
+255と-255を足して0になったのではなく,+255と+1を足して0になったのです。
11111111 =255
+ 00000001 =1
----------
1)00000000 =256
255+1=256ですが,その計算結果は8bit長に収まらずあふれます。その結果,8bit長の中に0が8つ残ったのであって,8つのゼロだけ見ていては正しい計算結果は分かりません。
>00000001は1でも-255でもあるのではないでしょうか。
1でも-255でもある数だなんて矛盾しています。
8bit長を用いて,0~+255の数を表現してもいいし,-128~+127の数を表現してもいい。質問者がそうしたいなら,
>貴方が-255~0を表すんだ、と解釈する分には全くそれでも問題ない(回答No.4)
しかしいずれにしろ,8bit長であるのなら,識別できる数の種類は「2の8乗」個だという制限から逃れることはできません。
10000001 というビット列が,解釈Aの下では+129を表すかもしれないし,解釈Bの下では-127を表すかもしれない。しかしいずれにしろ,解釈が一つ決まったならその下では数の意味も絶対に一意に決まるはずです。でなければそもそも計算など成り立ちません。ある解釈の下で+129でも-127でもある数だなんて矛盾しています。
質問者が想像していらっしゃる 255=B'11111111' で -255=B'00000001' という数値表現の体系では,その他の +254~+1, 0, -1~-254 といった整数も表現できるのでしょうか?
そうであるなら回答No.2で指摘されたとおり,そこで用いられる数の種類は「2の8乗」個を越えていますから,必然的に,それは8bit長だけでは絶対に表現しきれない数の体系だということになります。
No.4
- 回答日時:
2番です。
ようするに誰が解釈するか、ということではないかと思います。
貴方だけがそれを-255だ、このバイトは-255~0を表すんだ、と解釈する分には全くそれでも問題ないと思います。
ただ、そのバイトを外部機器に渡せば、1だと解釈されてしまいます。
だから「いけません」と本には書いてあるのだと思います。
No.3
- 回答日時:
>129でも-127でもある、
これは負の数を扱わないと決めた時です
>00000001は1でも-255でもある
この様に考えるなら00000001+00000001は幾つになりますか?
回答ありがとうございます。
たとえば、C言語のように、もともと、
正負の変数の型があれば、
符号付は、先頭ビットを正負に用いるので、
-128~127になる。といのは、
理解できます。
しかし、マイコン(PICのアセンブラ)では、
変数の型がありません。
そこで、単純に足して、0になる数を
負の数と便宜上扱っている、
と理解しました。とすれば、
00000001を-255と考えても
いいと思うのですが。
No.2
- 回答日時:
まず、8ビットで扱えるのは-128~127です。
-127じゃないですね。で、8ビットで表せる数の種類は、256通りだけです。
ですから、-255まで表したいとなると、正の数が扱えなくなります。
-256~255まで扱いたいとなると、512通りの識別が必要で、9ビット必要になります。
回答ありがとうございます。
たとえば、C言語のように、もともと、
正負の変数の型があれば、
符号付は、先頭ビットを正負に用いるので、
-128~127になる。といのは、
理解できます。
しかし、マイコン(PICのアセンブラ)では、
変数の型がありません。
そこで、単純に足して、0になる数を
負の数と便宜上扱っている、
と理解しました。とすれば、
00000001を-255と考えても
いいと思うのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語でセルオートマトンを作成...
-
16進数 加算 減算 C言語
-
VB6.0での小数点の扱いについて
-
CRCの計算方法について
-
BCD・HEX・BINについて
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
EXCELの関数"STDEV(標準偏差)"...
-
VisualBasic と Fortran の計算...
-
VBAのINT関数について
-
2進数 → 10進数変換 模範解答と...
-
ExcelのINT関数の計算結果がお...
-
10進数での「25」が2進数では「...
-
0~2πの範囲を十等分して…
-
VB.net Double と...
-
VBAでミリ秒まで出力する方法
-
Log関数に関する質問
-
floatの有効桁数
-
大きすぎる数値になるとE+にな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
VB.net Double と...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
ExcelでPC(パソコン)によって...
-
三菱シーケンサ(Aシリーズ)で...
-
除算を使わずに10で割りたい。
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
VB6.0での小数点の扱いについて
-
”/”を使わずに割り算したいんで...
-
距離から緯度経度を求める方法
-
VBAでミリ秒まで出力する方法
-
floatの有効桁数
-
コンピューターは指数関数をど...
-
時刻の比較
-
計算の丸め誤差の解消について
-
Double型について
-
powf を使わずにべき乗を計算
おすすめ情報