
こんにちは。
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で質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- 情報処理技術者・Microsoft認定資格 情報技術の問題についてです。 10進数の−36を以下のような16ビットの浮動小数点表示にするといくつ 3 2022/05/21 19:53
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- 英語 口頭での"the following..."の可否等について 6 2022/08/19 01:01
- Excel(エクセル) 警備の夜勤の仕事をしています。 誰か助けてください。エクセルのことです。 月の勤務表(表1)と月の人 2 2022/04/13 12:29
- Oracle ビットで表せる数値について 3 2022/09/12 16:37
- 数学 虚数単位i について「i =√-1<=> i^2=-1」と定められていますが、これらが同値であること 12 2023/07/05 16:39
- 数学 微分の問題です 1 2022/07/31 11:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c languageで 簡単な質問があ...
-
有効数字について 以前質問をし...
-
float.h のテスト結果がおかしい
-
ExcelでPC(パソコン)によって...
-
三菱シーケンサ(Aシリーズ)で...
-
16進数 加算 減算 C言語
-
除算を使わずに10で割りたい。
-
乱数について
-
三角関数、逆三角関数の算出方...
-
”/”を使わずに割り算したいんで...
-
floatの有効桁数
-
計算の丸め誤差の解消について
-
2038年問題 日付算出
-
MATLABでの行列の全要素の和
-
C言語プログラミングにて、arct...
-
2進数の足し算(C言語)
-
C言語でセルオートマトンを作成...
-
ExcelのINT関数の計算結果がお...
-
Excel 計算結果誤差
-
VB6のFIX関数での誤差について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
”/”を使わずに割り算したいんで...
-
CRCの計算方法について
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
時刻の比較
-
2進数データのビット演算
-
教えて小数点の比較!(C言語)
-
C言語 型変換のタイミング
おすすめ情報