jianhong_wu 发表于 2016-12-11 11:49:34

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


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位取反,其它不变。


页: [1]
查看完整版本: “异或”的运算符如何实现“取反”的功能?已解答。