不用辅助变量交换两个整数的值。真的很简单吗?
来源:互联网 发布:咖啡袋排气阀 知乎 编辑:程序博客网 时间:2024/05/04 09:51
比如给你两个数,a和b,让你交换他们两个数的值。
你可能会这样做:
sum=a+b;
a=sum-b;
b=sum-a;
这样真的对吗?
如果a和b的最大值为65536,a = 40000,b=40000,这样sum=80000吗?显然数据溢出了,sum的值就出错了。
这种方法仅限于没有溢出的情况下。
还可以这样做:
int c=a;
a=b;
b=c;
延伸:如果不能使用辅助变量呢?
你可能会这样:
a=a^b;
b=a^b;
a=a^b;
这下你认为肯定对,不会有溢出。
的确,这不会溢出,但如果a、b指向同一个数呢?
如int c=5;
int &a=c;
int &b=c;
结果是c变为0了。
改进:
if(a!=b)
{
a=a^b;
b=a^b;
a=a^b;
}
0 0
- 不用辅助变量交换两个整数的值。真的很简单吗?
- 不用辅助变量实现两个整数之间值的交换
- 不用额外变量交换两个整数的值
- 不用额外变量交换两个整数的值
- 位运算---不用额外变量交换两个整数的值
- 交换两个整数值,不用临时变量
- 不用辅助内存交换两个数的值
- 两个整数变量的交换
- 不用中间变量,交换两个变量的值的方法
- 不用变量交换两个int变量的值的分析
- 不用新的变量,交换两个变量的值。
- 不用临时变量交换两个变量的值
- 两个变量不用中间变量交换值的方法
- 不用中间变量交换两个整型变量的值
- 不用第三个变量交换两个变量的值
- 不用临时变量,交换两个变量的值
- 不用第三个变量,直接交换两个变量的值
- 不用第三个变量,直接交换两个变量的值
- SQL Server2008 评估期已过问题的解决
- 单网卡支持多VLAN的配置命令
- UIScrollView 总结
- oracle中的自增长——序列
- java ckeditor和ckfinder整合(二)
- 不用辅助变量交换两个整数的值。真的很简单吗?
- java中的comparable和comparator
- CentOs图形界面的开启与关闭
- 商户们的赚钱利器,消费者的剁手助手:支付宝钱包
- 变态的指针!
- 在微信的浏览器中下载手机安装文件 解决方法
- iOS_33_音效
- javax.el.PropertyNotFoundException: The class 'java.lang.String' does not have the property 'XXX'
- ios UINavigation 用法示例