前言
利用数电知识解题
#define get_bit(data,bit) (data & (0x01 << bit))
#define AND(a,b,i) (get_bit(a,i) & get_bit(b,i))
int ADD(int a,int b)
{
int i,carry_bit=0,ret=0;
for(i=0 ; i<16 ; i++)
{
ret |= get_bit(a,i) ^ get_bit(b,i) ^ (carry_bit<<1); //计算本位值
carry_bit = AND(a,b,i) | AND(a,carry_bit,i) | (get_bit(b,i) & (carry_bit<<1)); //计算进位值
}
return ret;
}
将上面代码精简
int ADD(int x,int y)
{
while(y != 0) //直到进位值消失
{
int tmp = x^y; //异或,计算出本位
y = (x&y)<<1; //与,计算出进位
x = tmp;
}
}