转自博客园的一篇文章,曾被作为公司的面试题

来源:互联网 发布:金十数据手机官网 编辑:程序博客网 时间:2024/05/21 14:58
http://www.cnblogs.com/stoneJin/archive/2011/10/28/2227684.html
不借助第三个变量交换两个整数的值

假设两个数x和y,则有:

方法1,算术运算(加减):

x=x+y; //x暂存两数之和
y=x-y; //y为两数之和减去y,即原来的x
x=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y

方法2,逻辑运算(异或):

x^=y;//x先存x和y两者的信息
y^=x;//保持x不变,利用x异或反转y的原始值使其等于x的原始值
x^=y;//保持y不变,利用x异或反转y的原始值使其等于y的原始值

关于异或运算要牢记两个原则:

任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1

0 0
原创粉丝点击