C语言中 为什么 a^(b^a) = b
a^(b^a) 展开是什么样子的
刚刚正好复习这个,琢磨了一个,放出来一个有意思的例子(也就是楼主心中展开的样子),希望可以帮到楼主和遇到这个问题的其他同学
int main()
{
char a[30] = { "abcd" };
for (int i = 0; i < 4; i++)
{
a[i] = a[i] ^ 8;
}
for (int i = 0; i < 4; i++)
{
a[i] = a[i] ^ 8;
}
return 0;
}
和你的描述相似,先拿a和b异或(括号里优先计算),这时候得出了一个“加密的结果”,第一次循环,我们可以看到局部变量a变成了i字符
循环加密四次后
我们发现abcd已经全部变化
好了,我们现在进入第二个for循环,再次异或(解密)
这时候,abcd已经全部“解密成功”。
因此,a^(b^a) = b就是加密到解密的过程。
15 回答8.4k 阅读
3 回答2k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答2.9k 阅读✓ 已解决
不光 C,支持位运算的语言结果都会是这样(可能运算符不是这个,但结果相同)。
^
是 XOR(异或)运算符,就是二进制逐位比较,如果某位相同、则记为 0,反之不同则记为 1。举个简单的例子:
P.S. 其实就是翻转再翻转。