经典面试题,不使用第三变量,交换两个变量的值,考考自己会吗?

首先我们现在应该弄明白电脑中的数据是以二进制方式运行的,我们今天就来先讲一讲

1.按位与 2.按位或 3.按位异或 4.按位取反 这四种概念

第一,首先是按位与

第二

第三

最后

 

其中,我们这里用到的知识点就是按位异或,见图三,两个二进制的数字,按位异或,相同的是0,不同的是1,那么如果两个相同的数按位异或,他的结果是什么呢?

答案就是0;因为两个相同的数,他们的二进制都是一样的,按位异或后,二进制全部变成了0,而0与任何数异或都是它本身,比如3与0异或答案就是3。

先上代码

int a=10;
int b=20;
a=a^b;
b=b^a;
a=a^b;
System.out.println(a);//a=20
System.out.println(b);//b=10

解释:

一开始a=10;第一步a=a^b;  b=b^a;-> 这个a就等于a^b;所以b=b^b^a;//现在b的值就是a了;

下一步a=a^b;b=b^a;所以,a=a^a^b;这样就完成了交换了。是不是很神奇!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值