
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);のように使います。
ところで、どうして剰余を求める時「論理演算と加減算とビットシフトのみで行う方法」が必要なのかということ自体に非常に興味があります。よろしければ、このような質問をされた理由を教えていただけませんでしょうか。
この回答へのお礼
お礼日時:2004/09/08 19:45
ありがとうございます。
No.4の回答にも書かれているのと同じような理由です。
実際はWindows搭載のコンピュータで実装しています。
したがって、%演算子を使えばいいのですが、
除算器と乗算器が無いものとして、実装を行いたいからです。
特に組込みのLSIを利用するものとして、作っています。
価格の都合で、あまり高価な回路にできないのだそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
return 1L
-
if と配列の組み合わせ
-
【C++】関数ポインタの使い方
-
c++でサインカーブ、コサインカ...
-
ラップ関数とはどんなものですか?
-
C言語で三目並べをするプログラ...
-
入力を待たずにstdinの監視をし...
-
C言語 等差数列問題
-
C言語のプログラム作成について
-
「{ } で囲むだけ」は正しい?
-
野球の対戦成績のテーブル表示...
-
複数桁10進数の*桁目だけを抽出...
-
acceptをalarmでタイムアウトさ...
-
C言語で分からないところがあり...
-
実数の整数部,小数部の取得
-
部分行列の抜き出し(C言語)
-
C言語の関数で戻り値を返す必要...
-
windows-findstrの正規表現を使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
エラー 添字が付けられた値が、...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
式は定数値が必要です」という...
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
構造体の勉強中です 合計点の高...
-
数字列を3桁ごとにカンマで区切...
-
return 1L
-
std::set<int> で、ある値が何...
-
C#のコンパイルエラーCS0120に...
-
比較回数と交換回数表示について
-
C言語で分からないところがあり...
おすすめ情報