鱼C论坛

 找回密码
 立即注册
查看: 1729|回复: 1

学习笔记之位运算

[复制链接]
发表于 2014-10-5 09:30:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题:  有两变量:  int a = 10, b = 20;
怎样实现不借助中间变量交换两变量的值?  使之 a = 20, b = 10?

其实很简单,只要如下就可以了
     a = a ^ b;        //异或运算符" ^ "   它的规则是  1 ^ 0 ->1   0 ^ 0 ->0   即 任何数与0异或 都不变;
     b = a ^ b;       //                                               1 ^ 1 ->0   0 ^ 1 ->1   即 无论是0还是1  与1异或都会实现反转  即0变成1  1变成0
     a = a ^ b;

分析:

    a=10的二进制   0000 1010
    b=20的二进制   0001 0100
    a = a ^ b就是   0001 1110      
    b = a ^ b          0000 1010      是不是就等于10?
    a = a ^ b          0001 0100      是不是就等于20?


再次分析:
a = a ^ b;
b = a ^b;     // 我们把a代入进去看看    即b = a ^ b ^ b          其中b ^ b 不就等于0吗 即b = a ^ 0  前面说过 任何数与0异或都不变  所以b = a
a = a^b;      //  我们再代入看看                a = a ^ b ^ a ^ b ^ b         别被这些搞糊涂哦  再按照上面的规则 是不是得出 a = b ?
                   //                                         注意了等号右边的a和b都是最初始的

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-11-1 01:51:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 03:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表