足し算

1183 ワード

タイトル:
つの関数を書いて、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言語のビット操作が上手で、プログラムが簡潔で効率的になります.