gpt4 book ai didi

c++ - 是 VAR |= 1 << 2;可逆的?

转载 作者:太空狗 更新时间:2023-10-29 23:24:11 33 4
gpt4 key购买 nike

首先我不确定这个按位运算是怎么回事。我编写代码并作为代码片段提供给其他方。

现在如果 VAR 是无符号 8 位整数(unsigned char)并且 r 是 0 或 1 或 2 或 4。如果 r 的值已知并且结果值在那里,则可以反转以下内容。VAR |= 1 << r;//即 200,其中 VAR 为 192,r 为 3

例如,VAR 的初始值为 192r 的值为 3 *结果为 200*。

现在,如果我有这个 200,并且我知道 r 的值 是 3,我可以将它反转回 192 吗?

我希望这是最简单的,但我不会这些位运算,所以请原谅我。

谢谢

最佳答案

答案是否定的。这是因为 | (OR) 运算符不是 one-to-one function .

换句话说,VAR 有多个值可以产生相同的结果。

例如:

r = 3;
var0 = 8;
var1 = 0;

var0 |= 1 << r; // produces 8
var1 |= 1 << r; // produces 8

如果你试图反转它,你将无法判断原始值是 0 还是 8

类似的情况适用于 & AND 运算符。


从信息论的角度来看:

运算符 |& 会导致信息丢失,并且不会保留数据的熵.

另一方面,^ (XOR)、+- 等运算符是一对一的,因此保留熵和是可逆的。

关于c++ - 是 VAR |= 1 << 2;可逆的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625349/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com