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)
它对负数进行OR运算与对正数进行OR运算的方式相同.这些数字几乎肯定以二进制形式表示,它给出了这些值:
17 = 0000000000010001 -15 = 1111111111110001
如您所见,17的所有位都已在-15中设置,因此组合它们的结果再次为-15.