一个安全的不用到第三个变量情i况下可以交换两个整型变量值

今天面试遇到一个题,这个题以前从来没有遇到过,就是不用第三个变量实现交换两个整型变量的值,我沉思了一会,终于想起:

a=a+b;

b=a-b;

a=a-b;

正在为了自己的一点成绩偷乐时,突然有觉得好像有点不妥,是啊,两个较大的数相加可能出现益处现象啊?

 

 

临走时候,为了解决自己的疑惑,想问老师(面试人员,亲切、耐心、善良所以想称他为老师)最终答案。他的答案让有有点震惊,有点不可思议。他说用“位异或”。

程序员已经四年,还没有听说过这样可以交换两个值,有点不敢相信。为了验证,我回到家找了相关资料,并亲自测试,结果老师是正确的,现在我把结果告诉大家:

int a = 3;

int b = 10;
a = a ^ b;
b = a ^ b;
a = a ^ b;

 

 

相关知识:

按位异或运算: 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)

二进制转十进制:从左边算起,只考虑1,结果是2的1所在的位数减一的2次方的和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值