• ベストアンサー

C言語の四則演算について

bnosuke-xの回答

  • ベストアンサー
  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.5

他の方と同じく、C言語の勉強として必要性が全く感じられない知識です。 C言語は、メモリやスタック等のCPUの動作をある程度意識してプログラムを組む必要がある言語ですが、だからといってそんなことまで知っている必要は全くありません。 今時、小さなCPUでも四則演算の命令はありますから、この知識が必要なのは旧式のCPUのプログラマか、CPUの設計者くらいなんじゃないでしょうか? もう、ほとんど”トリビア”に近いです。 さて、引き算を補数と足し算で行うやり方ですが、概念がわかる程度に解説させていただきます。 この補数による引き算は10進数でもできるので、10進数で説明します。 (#2さんと同じ話をしています) (1)2進数の世界での1の補数と2の補数は、10進数の世界での9の補数と10の補数にあたります。 (2)補数を考えるときは桁数を限定しないといけません。 ここでは桁数を4桁にします。 つまり a.0000~9999までしか数を表現できない b.足し算をして4桁を超えた部分は無視 ← これ大事 (3)ある数Xの9の補数は、引き算をせずとも求まります。 対応表を使います。 0123456789 ↓↓↓↓↓↓↓ 9876543210 例えば45の4桁の9の補数は、 45=0045→9954 になります。 (4)同じく10の補数は9の補数に1を足すと得られます。 例えば45の4桁の10の補数は、 9954+1=9955 です。 さて、9と10の補数についてわかっていただいたところで早速引き算をしてみましょう。 123-45の計算をしてみます。 1)足す数と引く数を4桁で表す。   0123 - 0045 2)引く数の10の補数を求める   0123   9955 3)足し算する   0123 + 9955 -----------------------  10078 4)桁を超えた部分を削る  0078 計算終了 と、こんな具合です。 2進数でも同じ要領です。 9、10の補数が1、2の補数になっただけで、桁数の限定、はみ出た桁の無視は同じです。 ところで、上のやり方で9の補数を求めるのに表を使っていましたが、2進数で1の補数を求めるときはその必要はありません。 0/1のビットを反転するだけでできるからです。 ですから2進数の引き算では、加算とビット演算だけで実現できてしまうのです。(加算だって論理演算の固まりですけどね) ....今、この知識が必要な場面を一つ思いつきました。 整数型においての負数表現です。 詳細はここでは述べませんが、その場合でも「なぜ負の数を2の補数で表現するのか?」の理由として紹介する方が適切かも知れません。 ですから根こそぎ必要ない知識ではないですが、CPUが割り算をどう計算しているのかとは、あまり関係のない話ですね。

kyocyan
質問者

お礼

bnosuke-xさん、ありがとうございます。 素人では、かなり難解でちょっと理解不能です。申し訳ありません。 でも、勉強が進めば理解出来てくるのでしょうか。 頑張ります。 大変お手数お掛けしまして、心より御礼申し上げます。

関連するQ&A

  • C言語での複素数の四則演算について

    C言語で、大きさ2の配列を2つ使って、複素数の四則演算のプログラムを作るのですが、配列をどう使うか分からず手が出せない状態です。 C言語を始めたばかりですので、基礎的なことしか分かりませんが、回答お願いします。

  • 四則計算

    四則計算(足し算、引き算、掛け算、割り算) 1・3・9・10で24にする方法を教えてください。

  • C言語の四則演算

    C言語で次のようなプログラムを作りたいのですが ソースを教えていただけないでしょうか? 四則演算のみの計算式を標準入力から受け取り計算式の通りに計算を行い計算式と答えを標準出力に出力する どなたか教えてください

  • C言語で四則演算を使って結果が10になる数式

    C言語のプログラミングについて質問です。 四つの一桁の数字を入力して四則演算を使って結果が10になる数式を作りたいのですが、イメージが湧きません。 教えていただけますか? 例:1234enterkey 答え2*3+1*4 数値の変数はint型でお願いします。int型ですので小数点以下を使って10になる結果は出さなくて宜しいです。お願いします。

  • c言語で四則演算の問題をランダムでだしたいです

    c言語で四則演算の問題をランダムでだしたいです。 学校の課題でだされていて誰か助けてください

  • コンピュータはなぜ減算ができないのか?

    たとえば コンピュータでは2-1を補数を利用して計算します。 しかし、繰り下がりの概念があれば以下のように 直接計算できるはずです。    0010 -) 0001 -----   0001 元々コンピュータには、繰り下がりに対応する演算回路が ないので、引き算が足し算のように簡潔にできない と思ってよいのでしょうか? また、掛け算は足し算のループを利用して計算しているのでしょうか? 割り算は、2の補数(ビット反転+1)の引き算をループさせて実現しているのでしょうか? ということは、計算のうち割り算が一番時間がかかると思ってよいのでしょうか?

  • 二進法での四則演算の方法

    コンピューターは二進法といって"0"と"1"だけの算数をする・・・ と子供に教えたところまではよかったのですが 「どんな風に計算するの?」と聞かれててんぱってしまいしました。 確か、1+1=10、10+1=11, 11+1=100のようにすると思っていましたが 全く自信がありません。足し算、引き算はまだ良いとして 掛け算、割り算はさっぱりわかりません。 親父の威厳を保つため、どなたかわかりやく教えていただけると 助かります。

  • 掛け算・割り算を先に計算する理由

    四則演算の際、 >「掛け算」、「割り算」を先に計算して、後で「足し算」、「引き算」を計算する という計算ルールがあるのですが、なぜそんなルールがあるのでしょうか? 「掛け算」、「割り算」を先に計算するのかっていう理由を説明出来る人は非常に少ないと思われますが、理由を教えてください。 「単位」をそろえる為にあるのでしょうか? よろしくお願いいたします。

  • 高校数学までの範囲で演算というものは何種類ある

    のでしょうか。たとえば、足し算、引き算、掛け算、割り算は同じ一つの演算となるのでしょうか。微分積分は違う種類になるのでしょうか。

  • 化学の四則演算、乗数に困った!!

    大学受験に向けて化学を勉強しているものです。 四則演算に困ったので数学カテで質問しますが、本当は化学の問題です。 どちらの分野にも明るい方からの回答をお待ちしています。 以下解説からの抜粋です。 アボガドロ定数を求める問題です。 アボガドロ定数をNmol^-1とすると、4.090×10^-7molが2.570×10^17個にあたる。 よってその比は 1:N=4.090×10^-7:2.570×10^17 ◆質問 1.Nを求めるには、どうやって計算したらいいのでしょう。 特にマイナスの乗数になっているところがわかりません。 2.Nmol^-1の意味がわかりません。N^-1molとはどう違うのですか? 3.また4.090×2.570の掛け算は、ふつうに3ケタ・3ケタの掛け算をして解いていますがもっと早い方法なんかはありますか?