独闷闷网

 找回密码
 立即注册
搜索
查看: 2896|回复: 0
打印 上一主题 下一主题
收起左侧

[原创] “异或”的运算符如何实现“取反”的功能?已解答。

[复制链接]
跳转到指定楼层
楼主
发表于 2016-12-11 11:49:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x

Alex-昆山:
port6^=0x02;
上述这行代码,其中^=是什么意思啊?

★坚鸿-深圳:
        一个端口8位,从第0位到第7位,上述的代码的意思是:第1位取反,其它不变。
       关于异或的取反功能,我在《从单片机基础到程序框架》第32节里有详细讲解。首先要清楚“异或”运算有一个潜在的规律:任何一个位,凡是与0进行“异或”运算都保持不变,凡是与1进行“异或”运算都会达到取反的运算效果。因此,如果想某位实现取反的功能,只要把相关的位与“1”进行“异或”运算就可以实现取反的功能。二进制中的一个位要么是0,要么是1,不管是0还是1,只要与1进行“异或”运算,是会达到取反的运算目的,0的会变成1,1的会变成0。请看以下这个例子:

    0^1等于1。(两个位相异)
    1^1等于0。(两个位相同)

         因此,某个端口与下列的数进行异或,会有这样的规律:
0x01第0位取反,其它不变。
0x02第1位取反,其它不变。
0x04第2位取反,其它不变。
0x05第3位取反,其它不变。


乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-5-3 07:02 , Processed in 0.141779 second(s), 17 queries .

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