• 締切済み

2進数の乗算をc言語で計算したいです。

二進数をc言語を用いて乗算したいのですが、 足し算と同じやり方でしか 思い浮かびません。 桁上がりを考慮するように頑張っても 正しい答えが出ません。 ifをたくさん使うやり方ではできるのですが・・・ あまりそれではプログラムが長すぎてしまします。 よろしくお願いします。

みんなの回答

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.3

何をしたいかよく分からないのですが、 桁の多い多倍長の整数の乗算をしたいという話でしょうか? 勉強の為に直接乗算の演算子を使わずに計算してみたいという話でしたら、 2進数の2倍や半分はビットシフトを使うと高速に計算できるので、これを利用すれば乗算を高速に計算できます。(参考URL) Cで乗算の計算式をコンパイルすれば、内部ではこの様なアルゴリズムやアセンブラの乗算命令などにコンパイラが最適化してくれます。

参考URL:
http://d.hatena.ne.jp/sh-2/20100605/1275763021
全文を見る
すると、全ての回答が全文表示されます。
  • joqr
  • ベストアンサー率18% (742/4026)
回答No.2

入力された2進数を10進数に変換して 計算結果を2進数に戻せばいい この様に考えれば、8進数と2進数の四則演算も容易にできます プログラミングとは、問題を解決するための手段であり 柔軟な発想ができなければ、つまらないだけですよ 頑張ってください

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

何をしたいのか, もっと詳しく書いてください. 単に a*b だけでも十分だったりしませんか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 16進数 加算 減算 C言語

    今学校でC言語を学んでいるのですが、「16進数同士の加算・減算」を行う問題が出されました。 16進同士の計算となると'A'~'F'や桁上がりの対処など壁にぶち当たっています。 私は10進に直してから加算・減算し、また16進に直す方法しか思いつかず。16進のままで計算は出来ると思うのですが、分かりません。 教えて下さい。お願いします。

  • C言語にてテキストファイル内の16進数計算

    お世話になります。 私自身開発経験が一度もなく、また難しいといわれているC言語に挑戦を試みている者ですが、最後までお付き合いのほどをお願いします。なお、実際作れるプログラムはprintf関数程度しか使ったことが御座いませんので、下名にて情報提供する事が出来ないことが多くご迷惑おかけするかも知れませんが予めご理解お願いします。 では本題の質問ですが、テキストファイル内に下記のような行があります。 ファイル名「1.txt」 NAME = "xxx"    /* 名前 ・・・(1) ADDRES = "004E3742" /* 16進数 目的 = "足し算" /* 目的 ・・・・・ ・・・・・ NAME = "yyy"    /* 名前 ADDRES = "004E374F" /* 16進数 目的 = "足し算" /* 目的    ・    ・ NAME = "zzz"    /* 名前 ADDRES = "00500000" /* 16進数 目的 = "足し算" /* 目的    ・ このように永遠に書き続けられたところで ADDRESの行の""に囲まれた16進数に、決まった16進数を加算した合計を同じ1.txtファイルに書き込むプログラム作成を考えております。 例 (1) 16進数3E45を加算と仮定 NAME = "xxx"    /* 名前 ADDRES = "004E7587" /* 16進数004E3742+3E45されている 目的 = "足し算" /* 目的    ・    ・    /* この後もADDRESを見つけ次第3E45を加算するプログラム のような結果を求めております。 ファイル操作の説明書や数ある参考書、WEBを見ても文字列の一括変換やその類のソフトは多数御座いましたが、希望する情報やソフトは御座いませんでしたので自分で作ってみようと思いました。 下名の勉強のためですのでせめて関数や、サンプルプログラム、もしくは説明されているWEBページなどをご紹介いただけると幸いです。なにとぞよろしくお願いします。

  • 2進数の足し算(C言語)

    C言語初学者です。 タイトル通り、2進数の足し算をするプログラムを作っていますが、行き詰ってしまいました。 特に、桁上げをどうするか悩んでいます。 今の自分の考えでは、入力された数値を10で割り、その余りを足していけばできると思っていたのですが、やはり桁上げや繰り上がりに悩んでいます。 全然できてませんが以下ソースです。 #include <stdio.h> int main(void) { int a, b, i; do { printf("8桁以下の非負の2進数を入力してください(1つ目): "); scanf("%d" ,&a); if (a < 0) puts("負の数を入力しないでください。"); } while (a < 0); do { printf("8桁以下の非負の2進数を入力してください(2つ目): "); scanf("%d" ,&b); if (b < 0) puts("負の数を入力しないでください。"); } while (b < 0); a = a % 10; b = b % 10; よろしくお願いします。

  • c言語のforの計算で悩んでいます。

    c言語のforの計算で悩んでいます。 これの答えがなぜ2000まで表示されるのでしょうか。 if文が意味がないというか、 if(0<a<1000)なので、999まで表示されるのかと思ったのですが。 もっとも後で、aを設定せず if(0<i*2<1000)とやればいいのではないかと気付きましたが。 既出でしたらすみません。

  • C言語

    C言語初心者です。C言語でかけ算を足し算で表すのはどのような式になるのですか?考え方は分かるのですが、どのように形にしたらいいのかわかりません、式をかいてくれるとありがたいです。 どなたか知恵をかしてください。

  • C言語にて。

    C言語にて。 ある10進数の数を文字コードを利用して 32進数にするプログラムを作成さる場合 どのようにすればいいでしょうか?

  • FORTRANとC言語のデータ受け渡し。

    卒業論文で計算プログラムをくんでいるのですが、 教授から、とりあえずa,bをCでscanfしてそれをFortranに渡し、 足し算させ和cを出し、それをC言語に持って行き、printfさせるプログラム を組んでみろと。C言語はそれなりにわかるつもりですが、Fortranはさっぱりです。データの受け渡しわかる方教えてください。

  • C言語の問題

    以下はC言語の問題です。お教えください。 1000以下の素数を求めるプログラム prog.c を作成せよ。各素数を整数4桁で出力し、15個の素数を出力した時点で改行処理 を行うこと。作成したプログラムを提出せよ。 です。 僕の考えでは、 #include <stdio.h> #include <math.h> main(){ int i; int j; int ix; int k; printf("正の整数を入力して下さい: "); scanf("%d",&i); ix=(int)(sqrt((double)i)); k=0; for(j=2;j<=ix;j++) { if(i%j==0) { k=1; } } if(k==0) { printf("%d は素数です\n",i); } else { printf("%d は素数ではありません\n",i); } となると思うのですが。どうやら違うようです。全然わからないので、正しい答えを教えてください。

  • C言語とC++言語

    C言語でコンパイルできC++でコンパイルできないプログラムとその逆でC++でコンパイルできC言語でコンパイルできないプログラムを教えてください。よろしく

  • 乗算記号は何故 "*" ??

    私の知っている限りの言語(C, C++, Java, COBOL)でも、全て乗算に"*"、除算に"/"を使ってますが、算数ではそれぞれ「×」「÷」ですよね。 これには何か理由があったのでしょうか? "/"は分数にも使われる(記述が逆ですが)のでまだ分かるのですが、数学の知識が浅いせいもあってか、"*"と乗算を結びつけるものが思いつかず、不思議に思ってました。 本当に単純な疑問なので、暇なときにでも回答くださいませ。