【问题标题】:What is the difference between "arr[i] ^= 1" and "arr[i] ^1" about XOR? [duplicate]关于异或,“arr[i] ^= 1”和“arr[i] ^1”有什么区别? [复制]
【发布时间】:2021-03-07 12:40:37
【问题描述】:

当我像下面这样写时

int [] test = {4};
int a = test[0]^=1;
int b = test[0]^1;

我可以得到这个输出。

输出

test[0]^=1 : 5 a : 101
test[0]^1 : 4 b : 100

我认为 test[0] = 100 -> test[0]^1 = 101 但事实并非如此。

      100 
  XOR   1
----------
      101

你能解释一下有什么不同吗?

【问题讨论】:

  • test[0]^=1 是语句,test[0]^1 是表达式。
  • 在第一次 XOR 操作后,数组 test[0] 中的值也会更新,为什么在第二次 XOR 后你会得到相同的结果。 test[0]^=1 等价于 test[0]= test[0] ^ 1
  • 我想说,不清楚您的问题是否是“test[0]^=1 是如何工作的?”或“按位运算符如何工作?”。我想在你的情况下两者都是,但最好澄清你到底在问什么,因为这两个概念(复合赋值和按位)是两个完全不同的主题。

标签: java xor bitmask


【解决方案1】:

因为test[0]^=1,test[0] 的值已经变成了101。 test[0]^=1 实际上是 test[0] = test[0] ^ 1。因此,在执行b = test[0] ^ 1 时,您实际上是在执行101 ^ 1,即100。所以程序输出是正确的。

int [] test = {4};   // test[0] = 4 = 100
int a = test[0]^=1;  // test[0] = 100 ^ 1 = 101 = 5, a = 5 = 101
int b = test[0]^1;   // test[0] = 5, b = 101^1 = 100 = 4

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 2022-02-04
    • 2015-07-31
    • 2015-01-06
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多