No.4ベストアンサー
- 回答日時:
私も割り算命令の無いCPU用にアセンブラで作ります。
符号ありは少し複雑なので、符号なしで・・・。
// x/yの余りを求める(8bit/8bitの余りの場合)
unsigned char mod(unsigned char x, unsigned char y)
{
unsigned int a = x;
unsigned int b = y;
b <<= 7;
for (int i = 0; i < 8; i++) {
if (a >= b) {
a -= b;
}
b >>= 1;
}
return (unsigned char)a;
}
No.3
- 回答日時:
既に回答がでていますが、
スピードを無視したアルゴリズムですが、
下記の関数は、わり算を行って、商と余りを返す関数です。
// a / b を求める
// 商はsho、余りはamariに格納される
// a >= 0, b > 0が前提
void sub_dev(int a , int b , int *sho, int *amari){
*sho = 0;
while(a >= b){
(*sho)++;
a -= b;
}
*amari = a;
}
a>=0,b>0が前提です。(そうでない場合は誤動作します)
int a = 10;
int b = 3;
int sho,amari;
sub_deb(a,b,&sho,&amari);のように使います。
ところで、どうして剰余を求める時「論理演算と加減算とビットシフトのみで行う方法」が必要なのかということ自体に非常に興味があります。よろしければ、このような質問をされた理由を教えていただけませんでしょうか。
ありがとうございます。
No.4の回答にも書かれているのと同じような理由です。
実際はWindows搭載のコンピュータで実装しています。
したがって、%演算子を使えばいいのですが、
除算器と乗算器が無いものとして、実装を行いたいからです。
特に組込みのLSIを利用するものとして、作っています。
価格の都合で、あまり高価な回路にできないのだそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
足して100になるような乱数のア...
-
#define _CRT_SECURE_NO_WARNIN...
-
if と配列の組み合わせ
-
課題でつまってます・・・
-
16進数の計算の仕方を教えて下さい
-
DLLをGetProcAddress()で実行で...
-
c言語 〇×ゲーム
-
連想配列に格納されたオブジェ...
-
構造体の勉強中です 合計点の高...
-
VBからのDLL呼び出しでエラー発生
-
int16_t の _t は何?
-
プログラミング☆
-
ポインタを使って関数の値の...
-
【C++】関数ポインタの使い方
-
因数分解を行うプログラムについて
-
既に定義されている関数のプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
c言語
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
実数の整数部,小数部の取得
-
(int *)の意味
-
c言語の配列を使ってサイコロを...
-
数字列を3桁ごとにカンマで区切...
-
「{ } で囲むだけ」は正しい?
-
C言語で分からないところがあり...
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
課題でつまってます・・・
-
read関数をノンブロッキングで...
おすすめ情報