C++如何对负数进行按位"或"操作?

Nar*_*yan 6 c++ bitwise-operators bitwise-or

当我给变量这样的值:e = 17|-15;,我在编译后得到-15作为答案.我无法理解c ++的算术运算.它如何对负小数执行逐位OR运算?

Car*_*rum 19

它只是对你的数字的二进制表示进行操作.在你的情况下,这似乎是两个补充.

 17 -> 00010001
-15 -> 11110001
Run Code Online (Sandbox Code Playgroud)

如您所见,OR这两个数字的按位仍然是-15.

在上面的评论中,您表示您尝试使用两个补码表示,但您必须做错了.这是一步一步:

 15 ->  00001111      // 15 decimal is 00001111 binary
-15 -> ~00001111 + 1  // negation in two's complement is equvalent to ~x + 1
-15 ->  11110000 + 1  // do the complement
-15 ->  11110001      // add the 1
Run Code Online (Sandbox Code Playgroud)


Rob*_*edy 6

它对负数进行OR运算与对正数进行OR运算的方式相同.这些数字几乎肯定以二进制形式表示,它给出了这些值:

 17 = 0000000000010001
-15 = 1111111111110001

如您所见,17的所有位都已在-15中设置,因此组合它们的结果再次为-15.