关于2个int变量交换的问题
2007-04-21 12:31
239 查看
转自csdn帖子
int a=1,b=2;
2个int变量交换的最短代码:
method1:b=a+(a=b)*0(最短)
这是充分利用运算符的优先级别和顺序做出来的,首先要了解两件事。
赋值运算符的优先级别是很低的,并且运算顺序是从右至左。
也就是说b = a + ( a = b ) * 0会先算右边的a + ( a = b ) * 0。
加法运算符的优先级别比赋值运算高,并且运算顺序是从左至右。
所以a + ( a = b ) * 0会先计算左边的a,然后再计算( a = b ) * 0,就是这个顺序使得a的值可以暂存。
剩下的事情就是把a=b这个表达式的值给消掉了,方法也很简单,两个字节搞定,*0。
method2:a ^= b ^ (b ^= a ^ b);
method3:a=a+b; b=a-b; a=a-b;
int a=1,b=2;
2个int变量交换的最短代码:
method1:b=a+(a=b)*0(最短)
这是充分利用运算符的优先级别和顺序做出来的,首先要了解两件事。
赋值运算符的优先级别是很低的,并且运算顺序是从右至左。
也就是说b = a + ( a = b ) * 0会先算右边的a + ( a = b ) * 0。
加法运算符的优先级别比赋值运算高,并且运算顺序是从左至右。
所以a + ( a = b ) * 0会先计算左边的a,然后再计算( a = b ) * 0,就是这个顺序使得a的值可以暂存。
剩下的事情就是把a=b这个表达式的值给消掉了,方法也很简单,两个字节搞定,*0。
method2:a ^= b ^ (b ^= a ^ b);
method3:a=a+b; b=a-b; a=a-b;
相关文章推荐
- 一、关于交换两个变量的问题
- 由论坛上关于不用变量实现STRLEN函数和宏定义2个数据进行交换
- [转]关于int整形变量占有字节问题
- 关于交换两个变量的不用第三个变量 异或的问题
- 关于int整形变量占有字节问题 面试有用
- rtl819x-SDK-v3.2.3中关于链接器LD变量设置的问题
- 关于shell变量的最长匹配问题
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- 关于int和Integer在开发中的问题
- JavaScript中关于var以及变量问题
- 指针修改变量的值,以及指针交换两个数字的值的问题
- 关于内部类中成员变量和外部类成员变量的问题
- 关于一个int *ptr=(int *)(&a+1)问题的探讨
- [c语言笔记]关于指针操作中使用异或交换两个变量的值
- The NOTE of learning ASP.NET [10] 关于.NET整型与浮点型变量使用上的效率和存储问题
- 用3种方法实现2个变量的交换
- 关于两个对象交换的问题
- 【前端】关于在for循环里面执行异步脚本导致变量都采用最后的一个变量问题
- C语言中关于INT_MIN宏的一些问题