首页 > 试题广场 >

执行 f(47, -42) 的结果是多少() int f(i

[单选题]
执行 f(47, -42) 的结果是多少()
int f(int a, int b){
int c;
do{
c = a ^ b;
b = a & b << 1;
a = c;
}while(b != 0);
return c;
}


  • 5
  • 29
  • -29
  • -5
首先我们了解一下加法运算规则,1+1=2.1+3=4;
换成为运算就是0001+0001=0010,0001+0011=0100;
我们可以再探讨一个(两个数)运算规律:
本位(a)   本位(b)   本位(c,结果)  进位(d,结果)
      0                0                    0                            0
      0                1                    1                            0
      1                0                     1                           0
     1                 1                    0                             1
总结一下上面的运算规律会发现:两个结果相加的本位是相同为0,不同为1,其实就是异或运算a+b=a^b,当然,这是本位的结果,还有进位的结果,我们依旧可以发现其实就是与运算,a+b=a&b,这是进位的结果。那么实际意义上的两个整数相加应该是什么样的呢?a+b=a^b+a&b<<1,就是本位加上进位的结果,左移其实就是进位的真正意义上的运算。那么上面答案就显而易见了,c的运算就是本位的结果,b的运算就是进位的结果,当没有进位的时候,程序退出循环,即当没有进位的时候,那么其实就是被加位十进制数为0的时候,即这两个数完成了加法运算。
可以看以下过程:
1+2=3;
即a=1=0001,b=2=0010
c= a^b=0011  b=0000
退出循环,c=0011=3.
1+3=4;
即a=0001,b=0011
c=0010 b=0010 
c=0000 b=0100
c=0100 b=0000
退出循环,c=0100=4.

发表于 2022-09-03 16:19:42 回复(3)
这题纯纯有毛病,应该是(a & b) << 1,这样这个程序就是在算一个加法,不然会先执行b << 1, 拿头算呢
发表于 2023-05-04 11:45:38 回复(0)
怎么算出来的,求解释
发表于 2022-08-16 08:24:29 回复(0)
考察信息的表示,如何进行正负数之间的位运算等
发表于 2022-06-20 23:27:46 回复(2)
qunimade,shenmelajiti,langfeilaozishijian
发表于 2022-09-11 21:58:47 回复(0)
发表于 2023-06-03 15:28:03 回复(0)
^表示异或,&表示按位与运算   负数的二进制表示为其对应正数的二进制取反再+1  
即-42=1101 0110          47=0010 1111
第一次:c=a^b = 1111 1001 b=a&b<<1 = 0000 0110<<1 = 0000 1100    a=c=1111 1001
第二次:c=a^b = 1111 0101  b=a&b<<1 = 0000 1000<<1 = 0001 0000   a=c=1111 0101
第三次:c=a^b = 1110 0101 b=a&b<<1 = 0001 0000<<1 = 0010 0000    a=c=1110 0101
第四次:c=a^b = 1100 0101 b=a&b<<1 = 0100 0000     a=c=1100 0101
第五次:c=a^b = 1000 0101 b=a&b<<1 = 1000 000       a=c=1000 0101
第六次:c=a^b = 0000 0101 b=a&b<<1 = 0000 0000   (b等于0,退出循环) c=a
return c = 0000 0101 = 5
应该是这样,如有错误请大家指正。 
发表于 2022-10-16 12:01:42 回复(2)
撇了一眼,a^b相当于求不考虑进位的和、(a&b)<<1相当于求进位值,循环更新直到进位为0,此时a的值就是a+b的和
发表于 2023-09-01 11:07:03 回复(0)
这题应该是循环到b溢出以后就变成0了,不可能自己动手算的,要循环28次,直到b溢出2^31次方-1.
发表于 2022-09-13 13:36:25 回复(0)
代码运行:
	
执行完成,耗时:N/A
Line 7: Char 19: runtime error: left shift of negative value -42 [solution.c]

发表于 2022-08-25 09:55:33 回复(1)