Go的位操作(&, |, ^, &^) 之我裂开了!

Go的位操作(&, |, ^, &^) 之我裂开了!

Go的位操作(&,  |,  ^,  &^) 之我裂开了!

昨晚看GO的讲解视频,讲到位操作,故事发生了。。。
视频中可以看到 a &^ b = 0100 ,但我始终不明白结果怎么得来的
于是,开始各种搜索 &^ 是啥,&^ 怎么算。。。
但是,按照我搜索理解的,自己解出来答案是 1000, 我开始裂开了
于是,我断言肯定是我做错了,肯定是哪理解的不对,于是我继续搜搜搜搜搜搜搜解答
无奈,我放弃了,我算的还是 1000 ,我裂的更大了
还好,我开始对视频产生了疑惑,仔细观察视频
发现, 视频里面虽然写的是 0100, 但是下面答案是 8, 8 的二进制是 1000
唉, 我裂的更大了
最后,得到一个结论:
以后切不可盲目迷信自己相信的,一定要本地coding验证!

最后讲下位操作:

  • x ^ y [ 异或 ]

    • 10 ^ 2 == 8 // 1010 ^ 0010 = 1000
    • 操作的结果是如果某位不同则该位为1, 否则该位为0
  • x | y [ 或 ]

    • 10 | 2 == 10 // 1010 | 0010 = 1010
    • 两个相应的二进位中只要有一个为1, 该位的结果值为1
  • x & y [ 与 ]

    • 10 & 2 == 2 // 1010 & 0010 = 0010
    • 两个相应的二进位都为1, 该位的结果值才为1,否则为0
  • x &^ y [ 位清空 ]

    • 12 &^ 2 == 12 // 1100 &^ 0010 -> 1100 -> 1100
    • 20 &^ 4 == 16 // 10100 &^ 00100 -> 10100 -> 10000
    • b 转为二进制时,结果首先与a相同,然后如果b值为1 则对应结果的位置值为0
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 3

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!