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