1.不使用+-*/计算两个数的和
int add(int x,int y)
{
if(y==0)
{
return x; //Y=0101&0011=0001
} //X=0101^0011=1110
else //Y左移一位继续& x继续^
{ 直到y为0时
return add(x^y,(x&y)<<1);
}
}
int main()
{
printf("%d\n",add(3,5));
return 0;
}
2、不能使用循环语句和判断语句,求1-100所有整数的和。
int num = 1;
int sum=0;
int fun() //定义fun函数
{
sum += num; //sum=sum+num
num++; //num+1 之后再与 sum+num赋值给sum;
return ((101-num) && fun());//&&逻辑运算符,非0时为真;
} // 判断101-num不等于0时调用
//fun();等于0时返回值;
int main()
{
fun();
printf("%d\n",sum);
return 0;
}
3、输入一个数字转换成二进制数取反,转换成十进制数输出;
unsigned int reverse_bit1(unsigned int value)
{
int i = 0;
int one;
int ret = 0;
for(i = 0;i<32;i++)
{
ret <<= 1; // 0001
one = value & 1; // 0010&0001=0000
ret = ret | one; // 0001|0000=0001
value = value >> 1;// 0010>>1=0001
}
return ret;
}
int main()
{
int test_val = 1073741824;//1000000000000000000//2
int ret = reverse_bit1(test_val);
printf("%u\n",ret);
return 0;
}