不用中间变量交换a和b的值,有哪些方法?
a=b^a;b=a^b;a=b^a;用异或这种方法肯定没错,我想问的是b=(a=b)*0+a;这种方法可以吗?不可以请详细说明下谢谢!...
a=b^a;b=a^b;a=b^a;用异或这种方法肯定没错,
我想问的是 b= (a=b)*0 + a ; 这种方法可以吗? 不可以请详细说明下谢谢! 展开
我想问的是 b= (a=b)*0 + a ; 这种方法可以吗? 不可以请详细说明下谢谢! 展开
1个回答
展开全部
不行。。 首先 a=b,将b赋值给a,此时a的值已经变为b的值, (a=b)*0为0,再加上a(此时a的值已经是b了),所以此语句的结果什么都没做。。比如a = 5,b=4.最后结果是4.
一种方法是 a = a+b; b=a-b; a=a-b;此时a,b值互换。。。
一种方法是 a = a+b; b=a-b; a=a-b;此时a,b值互换。。。
追问
那个加法我也知道,但是可能要考虑溢出的问题。
b= (a=b)*0 + a ;这个算式程序中不是应该从右往左吗? 相当于 a + “零”的值赋给b。“零”这个相当于处理b赋值给a,然后外面就是a赋值给b,这个逻辑能行得通吗?
因为b= a + (a=b)*0;这个和前一个按照从右往左计算 结果就不一样
追答
表达式的运算过程和数学中的规则一样,有括号先做括号内的子表达式。有多层括号,先运算最里层。同一层,负号优先运算,再接下来运算乘除,再加减;同一优先级从左到右进行运算。。从右向左运算的是赋值号吧。。
int main()
{
int a=5,b=4;
cout<<a<<" "<<b<<endl;
b = (a=b)*0+a;
cout<<a<<" "<<b<<endl;
return 0;
}
在G++环境下运行了一下,结果是
5 4
4 4
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询