首页 > 试题广场 >

下列程序的输出结果是

[单选题]
下列程序的输出结果是
#include<iostream>
int fun(int x, int y) {
	if (x == 0) {
	    return y;
	}
	else if (y == 0) {
	    return x;
	}
	else {
	    return fun((x & y) << 1, x ^ y);
	}
}
int main() {
	printf("%d\n", fun(12345, 67089));
	return 0;
}
  • 编译错误
  • 运行错误
  • 79434
  • 随机值
x:0 0011 0000 0011 1001 y:1 0000 0110 0001 0001 x&y:按位与运算,全1为1,有0则0 0 0000 0000 0001 0001 (x&y)<<1:向左移动一位 0 0000 0000 0010 0010 x^y:按位异或运算,同则0,异则1 1 0011 0110 0010 1000 将上述值作为参数,代入fun计算 即fun((x&y)<<1,x^y) 直到其中一个参数计算得到0,递归出口,并返回的另一个参数值 程序结束
发表于 2021-03-08 19:15:06 回复(0)
由排除法可以选出c答案这个函数其实表示的是二进制加法的原理,x代表进位,y表示本位,当进位或者本位为0时结束运算如7+3 二进制即111+11 第一次执行函数 x=110,y=100第二次执行函数 x=1000,y=10第三次执行函数 x=0,y=1010 进位为零,结束运算本位为零的情况参考1+1
发表于 2021-02-24 22:22:21 回复(0)
是不是((x&y)<<1)+x^y
发表于 2020-08-09 11:50:51 回复(0)
不使用+法,求两数之和,(x&y)<<1:表示进位,(x^y):表示不进位的加法。
发表于 2023-09-11 23:54:30 回复(0)
将&的值,也就是x+y的值赋给函数
发表于 2016-09-04 20:48:13 回复(0)
程序是对的,没毛病就会有结果,选C
发表于 2023-08-06 22:59:27 回复(0)
排除法选的,没有实际计算,程序是正确的,能编译通过正确运行得到正确结果就选了C。看到各位大神的评论才知道这个就是输出x+y
发表于 2023-02-12 21:54:34 回复(0)
这题目,厉害啊o(╯□╰)o
发表于 2016-01-15 21:33:05 回复(0)
逆天,c选项搞死刷新不出来,,,,根本选不了
发表于 2023-06-29 17:06:58 回复(0)