足し算
1183 ワード
タイトル:
つの関数を書いて、2つの整数の和を求めて、関数の体内で+、-、×、÷
分析:
四則演算が使えないので、他の操作を考慮して、ビット操作を考慮して、足し算をシミュレートします.まず、キャリーを考慮しないで、異種または操作をしてから、キャリーを考慮して、操作と操作を使って、キャリーと異種の結果を加算して、循環して、キャリーは0で停止します.
アルゴリズムコードは以下の通りです.
まとめ:
C言語のビット操作が上手で、プログラムが簡潔で効率的になります.
つの関数を書いて、2つの整数の和を求めて、関数の体内で+、-、×、÷
分析:
四則演算が使えないので、他の操作を考慮して、ビット操作を考慮して、足し算をシミュレートします.まず、キャリーを考慮しないで、異種または操作をしてから、キャリーを考慮して、操作と操作を使って、キャリーと異種の結果を加算して、循環して、キャリーは0で停止します.
アルゴリズムコードは以下の通りです.
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
int a, b;
a = 0xffff;
b = 0xffff;
int xor_val; //
int and_val; //
do
{
xor_val = a ^ b;
and_val = a & b;
b = and_val << 1; // , b
a = xor_val; // a
}while(b != 0);
printf("%x
", a);
return 0;
}
同様に、ビット操作を使って減算操作ができます.アルゴリズムコードは以下の通りです.#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
int a, b;
a = 0;
b = 1;
int xor_val; //
int and_val; //
do
{
xor_val = a ^ b;
and_val = (~a) & b;
b = and_val << 1; // , b
a = xor_val; // a
}while(b != 0);
printf("%d
", a);
return 0;
}
考え方は足し算と同じです.修正が必要なところは借位位置です.and_を使います.val=(~a)&bは、ここでは足し算とは少し違っています.まとめ:
C言語のビット操作が上手で、プログラムが簡潔で効率的になります.