No.8
- 回答日時:
>商と剰余を同時に求めることは可能なはずなので
x86では可能ですが、それが出来ないプロセッサもあります。(TRONチップがそうだったような。。)
Cは汎用言語なので、どんなプロセッサでも同じソースで動かなければならないので、こういう風になっているんだと思います。
x86環境ならインラインアセンブラで
void div(int a, int b, int *c, int *d)
{
_asm
{
mov eax, a
mov edx, 0
idiv b
mov ebx, [c]
mov ecx, [d]
mov [ebx], eax
mov [ecx], edx
}
}
main()
{
int a,b,c,d;
div(a, b, &c, &d);
}
#7様
除数と被除数の両方が定数で無い場合、最適化しても除算は2回になってしまうと思うのですが。。
除数が2,4,8..なら除算しないでシフトするだけかと思われます。
No.6
- 回答日時:
C++Builderの実装を見たんですが、div()はアセンブラで実装されてますね。
速そう。
No.5
- 回答日時:
1回の演算でできないのは、他の方々が言われているとおりです。
どうしても、1回でやりたい場合は、#3のかたのように関数を自作することになりますが、この程度の関数なら、マクロで実装することもできます。
------------------------------
//商と余りを同時に求める
#include <stdio.h>
#define MYDIV(HIJOSU,JOSU,SHO,AMARI)\
{\
SHO = HIJOSU / JOSU;\
AMARI = HIJOSU % JOSU;\
}
void main(void){
int sho1;
int sho2;
int amari1;
int amari2;
MYDIV(10,4,sho1,amari1)
MYDIV(10,-3,sho2,amari2)
printf("商=%d 余り=%d\n",sho1,amari1);
printf("商=%d 余り=%d\n",sho2,amari2);
}
-------------------------------
MYDIVのパラメータは被除数、除数、商、余りになっています。
被除数、除数を与えると商、余りが求められます。
商と余りを同時に必要とする演算が、ソースの中に大量に存在する場合は、このようなマクロを使用すると視認性は良くなります。
通常は、2回の演算を行う方法で十分かと思いますが・・・。
No.3
- 回答日時:
C の式は、一度に2つの変数に値を代入するのは不可能です。
(Perl ならできますが…)なので、どうしても商と剰余を同時に求めたいなら、次のような構造体を用意して、この構造体形式で値を返す(また、参照渡しでもいいのですが)関数でも書くしかないのではないでしょうか?
struct warizan {
int sho;
int amari;
};
struct warizan x;
struct warizan div(int a, int b)
{
static struct warizan res;
res.sho = a / b;
res.amari = a % b;
return (res);
}
main()
{
x = div(10, 3);
}
この回答への補足
説明不足で申し訳ありません。
時間短縮のために除算関数が2回呼ばれて演算時間
が浪費されているのをどうにかできないかなという
のが今抱えている本題です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(教育・科学・学問) 小学生の算数の商について 3 2023/03/06 14:11
- 簿記検定・漢字検定・秘書検定 日商簿記2級について 以前、試験を行っていて 分からない仕訳がありました 資本準備金(剰余金?)と利 1 2022/11/23 06:22
- 経済学 需要関数と供給関数がそれぞれ Y=D(p)=1000−p、Y=S(p)=2p−200で与えられている 2 2022/06/13 19:44
- 数学 数1 三角形ABCにおいて、a=2√3、b=2√2、A=60°の時 c、B、Cを求めよ。という問題で 4 2022/11/23 21:48
- 数学 x^nを(x-1)^2で割ったときの余りを求めよ 2 2022/04/23 16:08
- PHP PHP MySql ページング 2 2022/09/20 06:38
- 数学 写真の問題で剰余の定理を用いて、別解の手順から a=2 b=8と求まるところまではわかるのですが、な 2 2022/08/07 13:12
- 数学 代数の質問です 2 2022/04/30 14:10
- 数学 代数の問題です! 3 2023/06/04 14:01
- 簿記検定・漢字検定・秘書検定 株主総会において、資本金8.800.000を減少した。その他資本剰余金を同額増加させた上で、剰余金8 1 2023/01/18 19:10
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
C言語で%を使わない余りの出し方
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
int型とfloat型の演算結果
-
std::set<int> で、ある値が何...
-
「{ } で囲むだけ」は正しい?
-
未解決の外部シンボル _printf...
-
Win32APIで作るコンボボックス...
-
C言語のポインタの問題の解答が...
-
system関数がうまくいかない
-
return 1L
-
(マルチスレッド)_beginthrea...
-
(int *)の意味
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
c言語の配列を使ってサイコロを...
-
【C++】関数ポインタの使い方
-
(マルチスレッド)_beginthrea...
-
「{ } で囲むだけ」は正しい?
-
if と配列の組み合わせ
-
C言語でlookupのような関数って?
-
数字列を3桁ごとにカンマで区切...
-
課題でつまってます・・・
-
read関数をノンブロッキングで...
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
商と剰余を同時に求める(C言語)
-
std::set<int> で、ある値が何...
おすすめ情報