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

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

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

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

Q&A

2回答

8682閲覧

【基本情報技術者試験】nビットで表現できる値の範囲について

ai5

総合スコア40

基本情報技術者

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

0グッド

0クリップ

投稿2017/03/02 06:58

編集2017/03/02 10:50

基本情報技術者試験

●nビットで表現できる値の範囲
0~2のn乗-1
例)4ビット (0~15)

●負数を2の補数で表すとき、nビットで表現できる整数の範囲
-2のn-1乗~+2のn-1乗-1
例)4ビット (-8~+7)


上の式の意味を4ビットの例で読み取ってください。
負数を2の補数で表すと、一番左の符号ビットが1のものは、負数になります。

とありますが、下記の表を見たとき、
【質問】どのような計算で負数のある10進数が導かれるのでしょうか?

0以上の10進数4ビットの2進数負数のある10進数
000000
10001+1
20010+2
30011+3
40100+4
50101+5
60110+6
70111+7
81000‐8
91001-7
101010-6
111011-5
121100-4
131101-3
141110-2
151111-1

※負数を2の補数で表すと、この範囲の値は16を引いた負数になる

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

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

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

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

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

ikedas

2017/03/02 07:00

参考にしたもの (書籍やウェブページ) を明記して下さい (書籍なら著者名、書名、出版社、ウェブページならURLを明記する)。
ai5

2017/03/02 10:46

うかる!福嶋先生の集中ゼミ  基本情報技術者 午前編 著者:福嶋 宏訓  40p です。
ikedas

2017/03/05 14:23

その本のための解説動画も公開されているそうですが、観てみましたか。
ai5

2017/03/14 04:21

お返事遅くなって申し訳ないです。動画も見ました。
ikedas

2017/03/14 06:28

えーとすみません。何を見たんでしょうか。
guest

回答2

0

【質問】どのような計算で負数のある10進数が導かれるのでしょうか?

その2進数の値にxを足すと10000になる。
xを10進数にしたものをマイナス符号にする

#なぜにマイナス評価 間違っていたり解答になっていない(またはその他)なら理由をコメント欄にて指摘いただきたい

例:その2進数の値=1011

その2進数の値(1011)にxを足すと10000になる。x = 0101
x(0101)を10進数にしたも(5)のをマイナス符号にする(-5)

2進数の値足すと10000になる値(2進数)足すと10000になる値(10進数)足すと10000になる値(10進数)をマイナス符号にする
100010008-8
100101117-7
101001106-6
101101015-5
110001004-4
110100113-3
111000102-2
111100011-1

投稿2017/03/02 07:10

編集2017/03/03 04:42
Y.H.

総合スコア7914

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

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

ai5

2017/03/02 10:51

すみません、ある程度知識ある方ならわかるご指摘だと思うのですが、私はわかりません。。
Y.H.

2017/03/03 01:24

2進数の足し算/引き算ができることが前提となるので、これがわからないのであれば まず2進数の足し算/引き算を勉強してください。 0001+0001=0010 0010+0001=0011 0011+0001=0100 ・・・・ 1000-0001=0111 0111-0001=0110 0110-0001=0101 ・・・
ai5

2017/03/14 05:26

2進数の引き算苦手みたいです。よくわかりません。。。 1000-0001=0111 左から1借りるはずなのになぜ4桁目が0なのでしょう? 0111-0001=0110 これはわかります。  0110-0001=0101  0110の2桁目の1を借りてきて-0001して、答えの1桁目が0になり、0100になると思ったのですが、なぜこのようになるのでしょうか?
Y.H.

2017/03/14 06:01 編集

10進数でも一桁上の1を借りてきたら基数となる10から引きますよね。2進数も同じで1を借りてきたら基数となる2から引いてください。 0010-0001=0001 2進数ふた桁の引き算です。これは解りますか? これが解らないと説明のしようがないです。
jm1156

2017/03/14 06:05

足し算はわかるのでしょうか? 「引き算」の反対は「足し算」なので、 1000-0001=0111 だとすれば 0111+0001 = 1000 になるわけですが、これはわかりますか? 「繰り上がり」をしているわけです。 引き算の場合「繰り下がり」ですが、それはわかりますか?
dekky0910

2017/03/14 06:06

筆算で書いてみるとわかりやすいですよ。 1000 -0001 引き算の筆算は小学校で習っていると思うので大丈夫だと思うのですが2進数の場合は上から借りてくる数字は2です。 4桁目まで0なので1000.0200.0120.0112.そして0001を引いて0111になります。 手元にペンと紙があったら一度書いてみてください。 簡単ですよ
ai5

2017/03/14 06:10

Y.H.さん 2進数も同じで1を借りてきたら基数となる2から引いてください。 ここを見落としていたかもしれません。 1から1を引いていました。 なぜかというと2進数は0,1で2繰り上げになるので2を使ってはいけないと思っていました。 jm1156さん 0111+0001 = 1000はわかります。
ai5

2017/03/14 06:17

dekky0910さん ものすごくわかりやすいです。ありがとうございます。 わかってきたかもしれません。
ai5

2017/03/14 06:34 編集

別の問題なのですが、次の(2)がわかりません。 0111と0111を足しても1110にならないんですよね。。。(重み表を使えばなりますがこの計算ではなりません) 2の補数を使う理由 固定長の2進数の足し算を行うと、繰り上がって、けたが増えることがあります。このような場合、固定長からあふれたビットは切り捨てます。 例えば、7-4も、7+(-4)で計算することができます。4の2進数は0100で、2の補数はビットを反転した1011に1を加えた1100です。 ・2進数の足し算 (1)7+(-4) 0111   ⁺7 + 1100   -4 ------ 10011 ===================================== (2)7+7 0111 +0111 ──── 1110 → 0011(+2) ==================================== 負数を2の補数で表現しておくと、足し算だけで加減算を行うことが出来ます。 コンピュータでは、減算を加算回路だけで行うことが出来る。 負数を2の補数で表すとき、4ビットで表現できる値の範囲は、-8~+7でした。 7+7の計算をすると、表現できる値の範囲を超え、負数のー2になってしまいます。
dekky0910

2017/03/14 06:59

2の補数は理解できていますでしょうか? 0111(+7) -0100 (-4) --------------- 0011(+3) これが2の補数です。 これに1足した値を引きたい数字に足すと答えが出る仕組みです。 1011じゃないの?と思うでしょうが負の値を求めるときのビット計算は質問に書いてあると通り7~-8です。 4ビット目の1は何?となるかと思いますが聞くだけじゃ絶対に覚えれないのでここだけは調べてください。すぐわかります。 7+7がなぜ2になるかもこれがわかれば納得できるはずです。
swordone

2017/03/14 07:23

なぜならないか不思議だ。質問者に説明してほしい。 あとdekky0910さん、補数の説明違います。
guest

0

4 ビットの場合、0000 から 1 を引くと 1111 になります。
つまり -1 = 1111 です。
10000 から 1 を引いたと解釈できます。
同様に -2 は 10000 から 2 を引いたもので、-3 は 10000 から 3 を引いたものです。
ここで 10000 は 16 ですから、-1 = 16 - 1 = 15, -2 = 16 - 2 = 14, -3 = 16 - 3 = 13 となります。

投稿2017/03/02 11:13

Zuishin

総合スコア28660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問