どうしてもこの598に対する問題の答えが欲しいので、
分かる方、教えてください!
お願いします!!

10進数598を2進数に変換すると、((1))になる。
1に対する補数は((2))で2に対する補数は((3))である。
また8進数は((4))で、16進数は((5))である。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

簡単に4bitで考えてみましょう。


1010(10進数で10)の1の補数はビット反転すればいいので、
0101(10進数で5)になります。2の補数はこれに1を足すと
0110(10進数で6)。

0001(10進数で1)の1の補数はビット反転して
1110
2の補数は、1を足して
1111

1-1=0の式が成り立つか?1-1を1+(1の2の補数)と変形して2進数で足し算してみます。

 0001
+1111
-----
10000

桁上がりを無視すると見事に0になっていますね。

さて肝心の598ですが16bitの2進数で表わすと
0000 0010 0101 0110
ビット反転して1の補数を求めると
1111 1101 1010 1001
これに1を足して2の補数にすると
1111 1101 1010 1010


(なお先の私の回答で2の補数を求めるとき桁上がりは無視しますと書きましたが、桁上がりするのは0の2の補数を求めるときだけなので、特殊な場合です。失礼しました。)
    • good
    • 0
この回答へのお礼

丁寧で、分かりやすいご説明、ありがとうございました!
ゆっくり考えながらしっかり勉強したいと思います。

本当にありがとうございました!!(^^)

お礼日時:2001/07/31 23:50

x(xは16bitの2進数とする)の1の補数は1111 1111 1111 1111(2進数)からxを引けばよいのです。

xをビット反転したのと同じことです。
2の補数は1の補数に1を足せばいいです。桁上がりは無視します。
後はご自分で考えてみてください。それでもわからなかったら補足してください。
「xの2の補数を足す」という操作は「xを引く」という操作と同じことになります(桁上がりは無視する)。
これはコンピュータのCPUにとって、引き算が足し算に変わるので便利です。

この回答への補足

説明ありがとうございます!!
考えてみたのですが、2の補数は、0101010110になったのですが・・(^^;
1の補数が分からないです。
本当に何回も申し訳ないのですが、よろしければ解答だけでもいいので
教えていただけないでしょうか。
お願いします。すみません。

補足日時:2001/07/31 22:25
    • good
    • 0
この回答へのお礼

補足ですが
2の補数は0110101010になったのですが・・の間違えでした・・。
すみません・・・

お礼日時:2001/07/31 23:06

598→1001010110(2進法)


598→1126(8進法)
598→256(16進法)

補数ってのがちょっと解りません。。m(__)m(1の補数と2の補数があるので)
下記が参考になると思います。

Windowsの関数電卓使えばすぐ出ますよ。>変換

参考URL:http://www.geocities.co.jp/Playtown-Dice/5061/sa …
    • good
    • 0
この回答へのお礼

素早い解答本当にありがとうございます(^^)
助かりました!!URLも参考になりました。
もう少しで試験があるのですが、頑張ります(^^)

お礼日時:2001/07/31 22:24

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q2の補数について

情報処理試験(基本情報)用の考え方という前提でお聞きします。

「負数を2の補数形式で表現する2進数の計算で・・・・」という問題がよくあります。
この問題文の中で「10101」などの数(これは5ビットの符号付2進数とします)
として記述されているものは、もう2の補数になっていると考えていいのでしょうか?
それともこれを、今から2の補数に直すのですか?
(もし直すのであれば、最上位ビットの符号が変わるのでしょうか?)

違う言い方をしてみますと「A」の2の補数が「-A」だとしたら、
「-A」の2の補数は「A」になるんでしょうか?
それとも「そんな表現はない。-Aの時点ですでに2の補数だ」という
ことになるのでしょうか?

解りにくくてすみません。

Aベストアンサー

>問題文中の符号ビットが負数だったら、
>変換してしまうという考えでいいのでしょうか?
違います。計算過程で一時的に変換を行うのか、と言われればその通り、ということになりますが。
おそらく、手順としては正しく理解されており、言葉の用法が正しくないと思われます。

11010B=-11、という対応関係を見る際に2の補数を取っているのは、計算の便宜上のものであって、数自体を変換しているわけではありません。
x=10101Bがどの数に対応するのか、というのを調べる際には、次のように考えます。
但し、この議論は「負数を2の補数形式で表現する」場合の話です。
1.符号ビットが1なので、これは負の数として解釈しなければなりません。
2.ところが、負の数を表すビット列を直接数値に直すのは、慣れていないとなかなか難しい物があります。
3.そこで、-xがどの数に対応するのかが分かれば、xがどの数に対応するのかが分かる、というふうに考えます。
4.ビット列xから、-xを求めるには2の補数を取ればよいので、-x=01011Bとなります。
5.このビット列は11を表していますので、-x=11、が分かりました。
6.従ってx=-11です。
つまり、計算の過程で、計算の便宜上-xを算出するために2の補数を取って(-1倍して)いるに過ぎず、きちんと5→6の際に-1倍して元に戻しています。
数自体を変換しているわけではありません。

操作自体は理解されておられるようですから、あとは言葉の使い方の問題だと思われます。
一応、変換の手順を場合分けしておきます。(負数を2の補数で表現する場合)
・最上位ビット(符号ビット)が0のとき
素直に2進数を10進数に直せばOKです。
・符号ビットが1のとき
元の数をxとします。xを10進数に直すのは慣れが必要ですので、慣れのいらない場合に帰着させます。
つまり、-xを求めれば、それを-1倍してxを求められる、という考えをします。
xから-xを求めるには2の補数を取れば良いです。
こうして得られた結果は-xですから、最後に-1倍します。

ここで2の補数を取ってはいますが、後で-1倍するので、xの2の補数に対応する数を最終結果としているのではないことに注意してください。
つまり、この計算方法は「便宜上2の補数を利用している」のであって、「2の補数を取ったものを求めている」わけではありません。

次のようにも言うことができます。
・どんな場合でも与えられた数の2の補数を取ったものを求めて最終結果とする、ということはしない
・符号ビットが1の時には、2の補数=-1倍、という対応関係を計算の過程で利用する。つまり、2の補数を利用する
「2の補数を結果とする」と「計算過程で利用する」の言葉の違いを理解していただければ幸いです。
前者は「最後にマイナスを付ける」というニュアンスがありません。


ちなみに、負数を2の補数で表現する場合には、(オーバーフローしない場合には)10進に直してから足しても、ビット表現のままで2進数として足しても結果は同じになりますが、
負数を1の補数で表現する場合にはそのようなことは成り立ちません。

>問題文中の符号ビットが負数だったら、
>変換してしまうという考えでいいのでしょうか?
違います。計算過程で一時的に変換を行うのか、と言われればその通り、ということになりますが。
おそらく、手順としては正しく理解されており、言葉の用法が正しくないと思われます。

11010B=-11、という対応関係を見る際に2の補数を取っているのは、計算の便宜上のものであって、数自体を変換しているわけではありません。
x=10101Bがどの数に対応するのか、というのを調べる際には、次のように考えます。
但...続きを読む

Q進数変換のプログラムタイトルの由来

進数変換のプログラムのタイトルでは
dec2bin
dec2hex
bin2dec
bin2hex
hex2bin
hex2dec
などのタイトル名を聞きます
dec(10進),bin(2進),hex(16進)なのは分かるのですが、真ん中の"2"の意味がわかりません。このタイトルの由来を知っている方是非教えてください。

Aベストアンサー

英語の慣用表現で2=toです from dec to bin
forを4 youをuなどと書きます

Q2の補数の求め方

2の補数の求め方で、
・ビット反転して1を足す
・1を引いてビット反転
この2つの方法はどちらでもよいのてしょうか?

Aベストアンサー

どちらでもいいと思いますが、本来的な意味は、

補数をとりたい数の桁数より1桁多い

100...0

からその数を減ずることです。

Qverilog で「*」を使って2の補数形式の乗算って・・・

加算器、減算器 どうやらうまくいったようでやっと乗算器を作っています。それで早速質問ですが、2の補数形式を「*」をつかって作りたいのですが、次のようにやると文法エラーになってしまいます。
******************************
module mul(a,b,q);

input [15:0] a,b;
output [32:0] q;

reg [32:0] q;

always@(a or b)
begin
if((a == 16'h8000) || (b == 16'h8000))
$monitor("error");
else if((a[15] == 0) && (b[15] == 0))
q = a * b;
else if((a[15] == 0) && (b[15] == 1))
begin
q =a * (~b+1);
q = ~q+1;
end
else if((a[15] == 1) && (b[15] == 0))
begin
q =(~a+1) * b;
q = ~q+1;
end
elseif((a[15] == 1) && (b[15] == 1))
q = (~a + 1) * (~b + 1);
else
q = a * b;
end
endmodule
********************************
内容は
q = (~a + 1) * (~b + 1);
(mul.v,28|16): expecting a semicolon(';')
けれどどこが間違っているのか…
ちなみにalways@(a[15] or b[15])のように書き換えるとシミュレーションできるのですが、結果があっていません。
どなたか教えてくださいm(_ _)m

加算器、減算器 どうやらうまくいったようでやっと乗算器を作っています。それで早速質問ですが、2の補数形式を「*」をつかって作りたいのですが、次のようにやると文法エラーになってしまいます。
******************************
module mul(a,b,q);

input [15:0] a,b;
output [32:0] q;

reg [32:0] q;

always@(a or b)
begin
if((a == 16'h8000) || (b == 16'h8000))
$monitor("error");
else if((a[15] == 0) && (b[15] == 0))
...続きを読む

Aベストアンサー

最後の "else if" が "elseif" になっているためにエラーになるのでは。
でもそれだと、
>ちなみにalways@(a[15] or b[15])のように書き換えるとシミュレーションできるのですが、結果があっていません。
というのがわからないのですが。。。

ちなみに、上記のように記述を訂正してシミュレータ(Icarus Verilog)に
かけたところ通りました。結果はきちんと見ていませんが、それらしい値が
出ているようでした。

Q255の2の補数、B'00000001'が-255を表さない理由は

こんにちは。
8ビットマイコンで、
127=B'01111111'の2の補数
B'10000001'は-127を
表します。
しかし、8ビットマイコンで、
マイナスを扱うのは、-127~127で
先頭一桁は正負を表すので
使えない、と説明されています。
しかし、
255=B'11111111'の2の補数を、
B'00000001'を-255としても、
問題ないのでは、ないでしょうか。
両者を足せば、0になります。
先頭ビットを使ってはいけない理由は、
何でしょうか。
(127までなら、マイナスは先頭
ビットが、0になる。分類に便利、
というなら、分かりますが)。
何か分かる人がいましたら、
よろしくお願いします。

Aベストアンサー

 
00000001を-255とするなら「1」はどの様に表現する?

 


人気Q&Aランキング

おすすめ情報