按位XOR运算符和字节数组

时间:2017-02-07 13:45:57

标签: java arrays bitwise-operators bitwise-xor

我有以下代码:

byte[] S = new byte[256];
byte[] T = new byte[256];

for (int i = 0; i < 256; ++i) {
    S[i] = (byte)i;
    T[i] = 13;
}

int j = 0;
int i2 = 0;
while (i2 < 256) {
    j = j + S[i2] + T[i2] & 255;
    byte[] arrby = S;
    int n2 = i2;
    arrby[n2] = (byte)(arrby[n2] ^ S[j]);
    byte[] arrby2 = S;
    int n3 = j;
    arrby2[n3] = (byte)(arrby2[n3] ^ S[i2]);
    byte[] arrby3 = S;
    int n4 = i2++;
    arrby3[n4] = (byte)(arrby3[n4] ^ S[j]);
}

S []数组的初始值为:0,1,2,3,4,5 ......

当程序到达该行时:

arrby[n2] = (byte)(arrby[n2] ^ S[j]);

S [0]从&#39; 0&#39;更改其值到&#39; 13&#39;我无法理解为什么。 什么是修改S [0]值?正如我所看到的那样,&#39; ^&#39;只是进行比较并改变arrby [n2]的值而不是S [0]

的值

2 个答案:

答案 0 :(得分:6)

下面:

byte[] arrby = S;

您正在将arrby 指向指向与相同的数组。

然后:

arrby[n2] = (byte)(arrby[n2] ^ S[j]);

您正在更改该数组中的条目。

Tada ......

因此,解决方案是:如果您不想修改阵列的内容,请确保您不创建指向该阵列的其他引用。根据您的要求,您可以首先将数据从S复制到新创建的arrby数组中。

答案 1 :(得分:1)

下面的代码行使arrby引用与S相同的分配内存

byte[] arrby = S;