2進数の減算および加算を使用して乗算および除算を計算するCプログラム。"/"および "*"を除いた2進数の乗算および除算
* 2の補数。
私はこのコードを書く必要がありますが、私は完全にそれに固執しています。アルゴリズムや手順を教えてもらえますか?
2進数の減算および加算を使用して乗算および除算を計算するCプログラム。"/"および "*"を除いた2進数の乗算および除算
* 2の補数。
私はこのコードを書く必要がありますが、私は完全にそれに固執しています。アルゴリズムや手順を教えてもらえますか?
掛け算が繰り返されます。たとえば、3 x 7
は、合計7つの3コピーです。
同様に、除算が減算されます。あなたがゼロに到達するか、ゼロに近づくまで別の番号を減算することができる回数です。
その例は17/4
ある:従って
17 - 4 = 13 (once)
13 - 4 = 9 (twice)
9 - 4 = 5 (thrice)
5 - 4 = 1 (fource?)
1 - 4 = -3
17/4
は1
の残り、4
に等しいです。
2進数を加算したり減算したりする点では、2の補数は実際にはこれを簡単にします。なぜなら、エンコード方法は何があっても加算を使用することを意味するからです。
例えば、ここでは10に5
と-5
を追加する二つの例です:
0000 1010 (10) 0000 1010 (10)
0000 0101 (5) 1111 1101 (-5)
-------------- --------------
0000 1111 (15) 0000 0111 (5)
そして、その負に正の数を回すために、あなたは、単にすべてのbiutsが、その後1
を追加反転。
は実際にあなたは、単にあなたが主/小学校で習ったはず使用されるルールを使用し、一度に2つの2進数ビットを追加するには:
carry = 0
for each bit position starting at right:
tempnum = carry + num1[position] + num2[position]
result[position] = tempnum modulo 2
carry = integer(tempnum/2)
end for
乗算はちょうど同じ値を複数回追加されます。 何も残さない限り、除算は同じ値を複数回減算するだけです。 このコードを次のように考えて、負の数で機能させるために必要なことについて考えてください。
int multiply(int a, int b)
{
int result = 0;
while(b > 0)
{
result += a;
b--;
}
return result;
}
int divide(int a, int b)
{
int result = 0;
while (a >= b)
{
result++;
a = a - b;
}
return result;
}
int main(){
printf("100/3 = %d\n",divide(100,3));
printf("3*9 = %d\n",multiply(3,9));
}
Okey通常の整数などは良いです。値はバイナリコードですか?私は同じ論理を使うことができますか? – JaxTeller61
「バイナリコード」とはどういう意味ですか?変数を宣言し、バイナリコードを割り当てる例を投稿してください。上記のコードはdivide(7,3)のようなバイナリで動作します:divide(0b111,0b011); –
私は、例えば "101001"と "110011"と入力すると言っています。整数値ではありません。そしてıはこの "101001"と "110011"の値を使って乗算と除算を行わなければなりません – JaxTeller61
数値で乗算する最も有効な方法は、バイナリ形式で1のシフトを加算することです。 したがって、バイナリ形式で1010を乗算したい場合は、位置3に1があり(0ベース)、位置1に1があることに気づくでしょう。 したがって、n * 10 = nを掛けたい場合は< < 3 + N < < 1これは、人々が例えば番号 に文字列の高速変換のために使用するものである:私も答えに興味を持ってい部門について
void fs_int(int *x) {
register int c = getchar();
*x = 0;
int neg = 0;
for(; ((c<48 || c>57) && c != '-'); c = getchar());
if(c=='-') {
neg = 1;
c = getchar();
}
for(; c>47 && c<58 ; c = getchar()) {
*x = (*x<<1) + (*x<<3) + c - 48;
}
if(neg)
*x = -(*x);
}
...
2進数は逆方向に読み取らなければなりません!! – jurhas
はい私は実際にこれを知っています最初の質問です。しかし、私はこれをバイナリコードに実装することに固執しています。これどうやってするの? – JaxTeller61
@ JaxTeller61:私の後ろに繰り返し:「バイナリ数字のようなものはありません」あなたがそれを信じるまで繰り返す。 ( "バイナリ"は*だけの表記です!) – usr2564301