2016-10-29 11 views

答えて

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/41の残り、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 
+1

はい私は実際にこれを知っています最初の質問です。しかし、私はこれをバイナリコードに実装することに固執しています。これどうやってするの? – JaxTeller61

+2

@ JaxTeller61:私の後ろに繰り返し:「バイナリ数字のようなものはありません」あなたがそれを信じるまで繰り返す。 ( "バイナリ"は*だけの表記です!) – usr2564301

2

乗算はちょうど同じ値を複数回追加されます。 何も残さない限り、除算は同じ値を複数回減算するだけです。 このコードを次のように考えて、負の数で機能させるために必要なことについて考えてください。

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)); 
} 
+0

Okey通常の整数などは良いです。値はバイナリコードですか?私は同じ論理を使うことができますか? – JaxTeller61

+1

「バイナリコード」とはどういう意味ですか?変数を宣言し、バイナリコードを割り当てる例を投稿してください。上記のコードはdivide(7,3)のようなバイナリで動作します:divide(0b111,0b011); –

+0

私は、例えば "101001"と "110011"と入力すると言っています。整数値ではありません。そしてıはこの "101001"と "110011"の値を使って乗算と除算を行わなければなりません – JaxTeller61

0

数値で乗算する最も有効な方法は、バイナリ形式で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); 
} 

...

+0

2進数は逆方向に読み取らなければなりません!! – jurhas

関連する問題