質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
基本情報技術者

基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。

Q&A

解決済

4回答

1913閲覧

どうして、8ビット環境で、符号付きの場合、0b10000000が-128になるかがわからない。

Eisaku_Yoshida

総合スコア11

基本情報技術者

基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。

0グッド

0クリップ

投稿2020/11/17 05:15

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
どうして、8ビット環境で、符号付きの場合、0b10000000が-128になるかがわからない。

発生している問題

−127 = 0b10000001 0b100000000(128) - 0b01111111(127) = 0b10000001(-127) -1が 0b100000000(128) - 0b00000001(1) = 0b11111111(-1) であるということはわかります。 つまり、-127〜127を 0b10000001〜0b11111111で表現できます。 しかし、0b10000000が-128である理由がわかりません。 0b100000000(128)- 0b100000000(128)= 0b000000000 (-128??) -128 ≠ 0b10000000ではありません。 このように計算云々で求めるのではなくて、 -128を0b10000000で表せば、ビットを有効活用(一つ表現できる値が増えるから)できるだろうということで、 8ビット環境で、符号付きの場合に、 -128を0b10000000で表そうと「決めた」という認識でよろしいのでしょうか?

補足情報(FW/ツールのバージョンなど)

基本情報技術者試験N進数の問題

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2020/11/17 05:34

なぜ0b100000000(128)から引いているのですか?
Eisaku_Yoshida

2020/11/18 01:48

すみません、間違っていました。 0b100000000は256でした。。。
guest

回答4

0

ベストアンサー

0b100000000(128) - 0b01111111(127) = 0b10000001(-127)
0b100000000(128) - 0b00000001(1) = 0b11111111(-1)

何の計算をしているのか分かりません。
0b1_0000_0000は128でなく256ですし、128-127は-127ではなく128-1は-1ではありません。

0b100000000(128)- 0b100000000(128)= 0b000000000 (-128??)

同様に0b1_0000_0000は128でなく256です。
何の計算をしたいのか分かりませんが、最初の「128」を上と同様0b1_0000_0000(256)に、次の「128」を正しく128である0b1000_0000にすればあなたの思う結果になりませんか?

投稿2020/11/18 01:13

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eisaku_Yoshida

2020/11/18 02:16

すみません、おっしゃる通り、0b100000000は256でした。 桁数を繰り上げることは、理解していたので、10進数表記をよく確認しないまま、 128だと思い込んでいました。 256から引くのが正しいです。 ご指摘ありがとうございます。 0b100000000(256) - 10000000(128) = 10000000(-128)になりました! ありがとうございます!
guest

0

負の数は、以下の様に考えることができます。
例えば、127に、ある数Xを加えると0になった場合、Xは-127であると考えることができます。
8ビットで数を表す場合(8ビットを超えた数は無視します)。以下になります。

0b0111'1111(127) + X = 0b0000'0000(0) ⇒ X = 0b1000'0001(-127)
同様にして、
0b0111'1110(126) + X = 0b0000'0000(0) ⇒ X = 0b1000'0010(-126)
...
0b0000'0001( 1) + X = 0b0000'0000(0) ⇒ X = 0b1111'1111( -1)

128の場合
0b1000'0000(128) + X = 0b0000'0000(0) ⇒ X = 0b1000'0000(-128)

同じものを足しているので、ちょっと変な感じもしますが。考え方は間違っていないと思います。

投稿2020/11/17 06:03

akiruno-oneone

総合スコア815

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eisaku_Yoshida

2020/11/18 02:17

ご丁寧にありがとうございます!!
guest

0

こちらに全ビットが書かれてます。一覧を見たら理解できますでしょうか。
8bitの符号付整数一覧 signed integer

投稿2020/11/17 05:34

yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eisaku_Yoshida

2020/11/18 02:17

こんなサイトがあったんですね! 知らなかったので、勉強になりました! ありがとうございます!
guest

0

単純な2の補数表現です
-127から1を引けば-128 ですね

これのなにがわからないのでしょうか

投稿2020/11/17 05:17

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eisaku_Yoshida

2020/11/18 02:18

確かにそうですね! ご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問