
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ランキング
-
最早開始時間と最遅完了時刻を...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
(マルチスレッド)_beginthrea...
-
C言語での奇数の和
-
CStringの配列要素を関数で受け...
-
未解決の外部シンボル _printf...
-
C言語でのプログラム
-
int16_t の _t は何?
-
PowerShellがうまくいかない
-
式は定数値が必要です」という...
-
if と配列の組み合わせ
-
2次元配列とポインタの引数受け...
-
C言語のプログラム作成について
-
【C++】行列データの読み込み
-
数字列を3桁ごとにカンマで区切...
-
部分行列の抜き出し(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
return 1L
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
式は定数値が必要です」という...
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
C言語でDxlibを使って3x3の奇数...
-
プログラムについて(UNIX)
-
acceptをalarmでタイムアウトさ...
-
C言語の課題です
-
エラー 添字が付けられた値が、...
-
CStringの配列要素を関数で受け...
-
最早開始時間と最遅完了時刻を...
-
入力された数字を大きい順に並...
おすすめ情報