• 締切済み

2進数演算について

1. 6をBinary Codeal Decimalで表してください。 2. 51.16を2進数で表して、次に   1)IBM方式   2)IEEE方式 の、二つの方式で浮動小数点表示で表してください。 3. 51.16-61.15を2進数で表して、2's comp(2の補数表示)で演習してください。 4.-(20+ 6)×( 5+ 6) を、2進数表示で表して、Bocth's Algorithm で計算してください.  減算は2's comp部分積を右シフト。 5. (210+6)÷(15+6) 引き出し法で計算してください.  減算は2's comp部分剰余の左シフト。

みんなの回答

  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

たくさんありますね。レポートの課題ですか。 (1)4桁で表せば 0110 (2)それで浮動小数点数の桁数はいくらなんでしょうか。51.16を完全に2進数で表現することはできません。とりあえず整数部16桁小数部16桁で打ち切るとすると 0000000000110011.0010100011110101 あとは延々と続きます。 32ビットとして示しておきますから、64ビットの場合は自分でやってください。 IBMフォーマットでは 51.16=0.19984375×(16^2) ですから、仮数部の2進数は 00110011001010001111010111 指数部は1000010 (E=66) よって 0 1000010 00110011001010001111010111 IEEEフォーマットでは 51.16=1.59875×2^5 ですから、0.59875を2進数に変換して、 10011001010001111010111 指数部は 10000100 (E=132) よって 0 10000100 10011001010001111010111 (3)この演算では演算桁が10ビットは必要である。 -(0000010100+0000000110)×(0000000101+0000000110) =-(0000011010)×(0000001011) =(1111100110)×(0000001011) Boothの乗算法については以下のリンクでやってみてください。 http://www.ecs.umass.edu/ece/koren/arith/simulator/Booth/ (5) 引きっぱなし法はここで計算できます。 http://www.ecs.umass.edu/ece/koren/arith/simulator/NRDiv/ 一つぐらいはご自分でお考えください。 疲れました。

参考URL:
http://www.ffortune.net/comp/develop/data/kazu.htm
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【初心者から質問】 2進数の減算について

    学校で「アセンブラ言語」について学び始めました。 「2進数の減算」が分かりません。 ・減算は負の数の加算でおこなう。 ・負の数は2の補数であらわす。 ・補数を導き出すには「ビット反転」と「+1」する。 この3つのルールのことは何となくわかります。 では、  0110 1001 -0010 1100  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  の計算の仕方を教えていただきたいです。   0110 1001 -0010 1100  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄   1101 0011  (ビット反転) +1101 0100  (+1する)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  自分でやってみましたが、この先がわかりません。 (つまり負の数を加算する部分が分からないです) この先の答えと、計算方法を教えてください。 よろしくおねがいします。

  • 次の2進数の減算を2の補数を用いて計算せよ。

    次の2進数の減算を2の補数を用いて計算せよ。 (1011)2 - (0101)2 お願いします。

  • 2進演算について。

    以下の問題でのこの答えが合っているか自信が無いので確認と間違いがあれば指摘をお願いします。 (1)次の整数を8bitsの符号+絶対値表現、2の補数表現、127増し表現で表現しなさい。    -20    +55 (2)次の10進小数を、32ビットの浮動小数点表示しなさい。    -123.8125 答(1) -20 (+絶対値表現)→ 1001 0100 (2の補数表現) → 0001 0100 (127増し表現) → ? -20の+絶対値表現というのはそのまま20の8bit表示でいいんでしょうか? マイナスなので一番左のビットに1を立てればいいだけでしょうか? それと-20の2の補数表現は-20の2進表現を逆数にして1足すので結局20の2進数でいいのでしょうか? +55 (+絶対値表現)→ 0011 0111 (2の補数表現) → 1100 1001 (127増し表現) → ? これは+なので普通に考えてこの答えで間違いがあるでしょうか? それといずれの問題でも「127増し表現」というのはどうすればいいのでしょうか? 答(2) -123.8125の32ビット浮動小数点表示は 123.8125(10進)→ 111 1011.1101(2進) 0.11110111101×2^7 (正規化) で、32ビットの浮動小数点表示は 1 00000111 11110111101000000000000 なると思うのですが、どうでしょうか? 解答と指摘をお願いします。

  • 【続】コマンドライン引数を使って2進数を10進数に変換させたい

    先日も同じプログラムについて質問させていただきました。まだ解決しないので再度、質問させてください。私なりに考えてコードを書いたのですが、おもったように2進数を10進数に変換出来ません。C言語を習い始めたばかりで難しいコードが解りません。出来ましたら作成途中のコードをベースに正常に動くプログラムを教えていただければ幸いです。仕様としては、コマンドラインを使って引数を持たせて動くようにすることです。作成環境は「Windows XP」「Visual Studio .net 2003」 -------------------------------------------------------- <作成したコード> // binary.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include "stdafx.h" #include <stdlib.h> int _tmain(int argc, _TCHAR* argv[]) { int i=0,n=0; char decimal[ 128 ], binary[ 128 ]; if( argc < 2 ){ printf("2進数を入力してください。\n"); return 0; } // printf( "arg[0] = %s\n", argv[0] ); // printf( "arg[1] = %s\n", argv[1] ); for( i=0; argv[1][i] != '\0'; i++ ){ binary[i] = argv[1][i]; } binary[i] = '\0'; //空白文字のチェック/////////////////////////////////////////////// for( i=0; i<binary[i]; i++ ){ if( binary[ i ] != ' ' ){ decimal[ n ] = binary[ i ]; n++; } } //'\0'を代入(文字列の終端)/////////////////////////////////////////////////// decimal[ n ]='\0'; //「0」と「1」のループ/////////////////////////////////////////////////////// for( i=0; i<decimal[i]; i++ ){ if(( decimal[ n ] == '0' ) || ( decimal[ n ] == '1' )){ //「0」または「1」の判断 }else{ printf("エラー\n 「0」と「1」以外の文字が入力されております\n");//エラーメッセージ } } //桁数のループ////////////////////////////////////////////////////////////// int m = 0; for( i=0; i<'\0'; i++ ){ m = m +1 ; } //桁数の判断//////////////////////////////////////////////////////////////// if( m == 8 ){ }else{ printf("エラー\n2進数(0,1)を8桁、入力して下さい。\n");//エラーメッセージ } //add・初期化//////////////////////////////////////////////////////////////// int add = 0; //decimal[0]~decimal[7]の判断/////////////////////////////////////////////// if( decimal[ 0 ] == '1' ){ add += 128; } if( decimal[ 1 ] == '1' ){ add += 64; } if( decimal[ 2 ] == '1' ){ add += 32; } if( decimal[ 3 ] == '1' ){ add += 16; } if( decimal[ 4 ] == '1' ){ add += 8; } if( decimal[ 5 ] == '1' ){ add += 4; } if( decimal[ 6 ] == '1' ){ add += 2; } if( decimal[ 7 ] == '1' ){ add += 1; } //2進数を10進数に変換した値の出力//////////////////////////////////////////// printf("2進数を10進数に変換した値は %d \n",add); return 1; } -------------------------------------------------------- 近くにC言語を相談出来る方がいません、この場をお借りして解決の糸口を見つけたいです。宜しくお願いします。

  • 論理回路

    この問題教えていただけませんか (1)次の減算を符号無し4ビットで補数計算をせよ。 (1) +5 -)+6   0101 +) (2) -5  -)-4 (2)次の16進数減算を補数加算せよ。 (1)4B0C -) 3A56・・・3A56の16の補数を加算

  • 10進数→2進数

    2で割った余りを並べていく、小数部分を2倍して整数部分を並べていく方法で10進数を2進数に変換できる理由、nbitになるように0を左側につけて0と1を反転させ1を足すとnbitの2の補数表示の2進数を求めることができる理由が分かりません。分かる方、教えてください。

  • 問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示

    問:負数を2の補数で表現する符号付き16ビットの2進数を16進法で表示したもののうち、4倍するとあふれが生じるものはどれか。 ア 1FFF イ DFFF ウ E000 エ FFFF 以下は、それぞれを2進数表示にしたものです。 先頭の符号ビットは[0]の表記で目立たせてあります。 ア [0]001 1111 1111 1111 イ [1]101 1111 1111 1111 ウ [1]110 0000 0000 0000 エ [1]111 1111 1111 1111 以下は、4倍したもの ア [0]111 1111 1111 1100 イ [0]111 1111 1111 1100 ウ [1]011 0000 0000 0000 エ [1]111 1111 1111 1100 この場合は、ア以外は負数ですが、『負数を2の補数で表現する符号付き16ビットの2進数を、16進数で表現した場合』は16進数が正の数でも、2進数だと負数になると言う事でしょうか? また、符号付きでない場合は、上記はすべて正の数と言う事で合ってますか? 回答を見る感じでは16進数を2進数に変換しただけで、『2の補数で表現』の部分がないように思えます。この辺りも知りたいです。 問題の解き方についても疑問があります。 http://questionbox.jp.msn.com/qa4278151.html での回答では、 イ DFFF →(シフト前)1101 1111 1111 1111 →(シフト後)0111 1111 1111 1100 先頭ビットが1から0に変わったので「桁あふれ」。 問題集の回答ではこっちで説明されていました。 http://okwave.jp/qa/q4302488.html のANo2回答では (シフト前)[1]101 1111 1111 1111 (シフト後)[1]111 1111 1111 1100 2の補数表現による負の数の場合,シフト操作によって1が消えていくのは問題ない。 シフト操作によって0が消えると結果が変になる。これが「あふれ」 符号はシフトさせず、左に2つシフトさせた事で、10が消えた事で桁あふれとしています。 ANo1の回答では、 DFFFだと同様に 1101 1111 1111 1111で1の補数は 0010 0000 0000 0000 2の補数は 0010 0000 0000 0001 つまり、-8193ですよね。 4倍すると、-32772で、これは16ビットの2の補数表現 で表現できる数の範囲からあふれてしまいます。 DFFFなどの2進数に変換後、2の補数を使用するのが正しいのでしょうか? 最初の2つの回答では2の補数を使用していなかったので、疑問に思っています。 頭が混乱しております・・・。 回答宜しくお願い致します。

  • 負の2進数の表示がわかりません

    Q1:負の数(例えば10進数の[-2])を2進数,4ビットで表すには, 1010(MSDの[1]は[-]を表して,後半の3桁は[2])か 1110([0001]の2の補数) どちらが正しいのですか?(学校ではどちらも習いました) またQ2のような計算をするには補数による表示でないとなりませんか?(絶対値に符号をつけるだけだと計算が合いません) Q2:4ビットで表された2進数の計算で    0101-0010=0101+(1110)=10011 となり,答えが5ビットになってしまいます.下4桁で考えると答えが合っている気がします.これで合っていますか?

  • 受験票到着目前での悪足掻きです。

    負の2進数の割り算が演算シフトの方式で実施される際には、 演算結果へと"補数"が適用されるのでしょうか?

  • シフト演算について

    基本情報技術者試験の資格試験のための勉強をしているものです。 現在、カテゴリー的には基礎理論の離散数学、 シフト演算のうち、「論理シフト」ではなく、 「算術シフト」で理解できない点があります。 左シフトは理解できたつもりなんですが・・・ 右シフトがいまいちよくわかりません。 以下に例題を表記します。 【10001100を2ビット左シフト】 先頭ビットは符号ビットということで、マイナスの数値になるのだと思います。すると、 【元の数】 10001100 =-(0001100) =-(8+4) =-12 【2桁左シフト結果=元の数×2^2】 10110000 =-(0110000) =-(32+16) =-48 となり、 元の数=-12 結果 =-48 で、結果が元の数×2^2で結果が合っているようです。 (と思っているだけなんですが) 元の数の考え方自体に間違いがありそうですが・・・ とりあえず進みます。 同様に 【10001100を2ビット右シフト】すると 【2桁右シフト結果=元の数×2^-2(=元の数×1/4)】 11100011 =-(1100011) =-(64+32+8+4) =-99 となり、 元の数=-12 結果 =-99 で、結果が元の数×2^-2(=元の数×1/4)と結果が合いません。 先頭符号を空いたビットに移動した部分は数えないのでしょうか。 すると、 元の値 =-12 結果  =-3 で結果が合う気がします。 過去の回答や検索サイトなどで調べてみましたがピンときません。 テキストにも、10進数での数値表記はなく、 答え合わせができなくて困っております。 どなたかお答えいただけると助かります。 どこが間違っているのか混乱しております。 先頭ビットが正負の符号ビットという前提の例題なのですが、 マイナス符号がついている前提となるので 先頭ビットや空いたビットに入れた符号ビットも含めて 「2の補数」で考える必要があるのかどうかも よくわからなくなってきました。 つまり、元の数値「10001100」は「-12」ではなく -(01110100) =-(64+32+16+4) =-116 なのでしょうか なお、C言語は今のところ学習していないので、 C言語にまつわるご回答ですともっとわからなくなりそうです。 単純に間違いを指摘していただけると大変助かります。 よろしくお願いします。

診断ツールが止まった
このQ&Aのポイント
  • エプソンのEW452Aを使用中。用紙があるのに用紙がないと出て、入れ替えても動かない。
  • エプソンの診断ツールを起動したら、5%のところでフリーズしてしまい、キャンセルもできない。
  • エプソンのEW452Aで用紙の問題が発生。診断ツールの起動時にフリーズし、キャンセル不可。
回答を見る