计算Not bitwise运算符的步骤

时间:2018-05-29 00:47:28

标签: php

我过去曾读过一些以前的问题,但仍然无法完成我必须做的步骤

Bit not operation in PHP(or any other language probably)

What is “2's Complement”?

${sessionScope.user.login}

如果我理解正确,第一步是转换为二进制。在二进制中,它是1001.然后,NOT运算符从1001转换为0110。

此后我该怎么办?我添加1吗?我在解释中给出的所有解释中都迷失了。

或者做出有根据的猜测(在考试条件下)更简单。如果我拿-9,(步骤1)转换为9和(步骤2)然后带走1.这会给我8.这是一个正确的模式来找出答案吗?

1 个答案:

答案 0 :(得分:2)

这很简单,但首先你必须注意这样一个事实:如果你的系统是32位,你就不能用全32位代表数字而只是31位,16位和8位系统相同;最右边的位从不用于表示数字的大小,而只是表示符号。

在某些方面,您可以告诉系统将所有位用于量级,因此2的补码不会被使用,并且所有数字都将被假定为正数但通常为最多&#34 ;定期"我们使用签名号码的业务

以下是8位系统的示例

步骤1.将其转换为二进制(您已经这样做了)

enter image description here

你可以看到,因为它的二进制从右到左,每个地方的值是下一个的两倍,与十进制相比,每个地方值是其前身的10倍

步骤2.从上一步

中反转所有位

enter image description here

步骤3.现在将1添加到上一步的累计结果

enter image description here

现在~以上结果将给出00001000,即8 为什么这样?

因为你正在使用BITWISE运算符,所以它不知道底层数字它应该做什么 - 反转其余的事情,比如如何理解这个1s0s是由系统做反向2s补码但是因为它&# 39; sa正数(MSB为0)因此它知道没有必要做任何事情它只是将其转换为十进制但是它已经为负,它将完成所有计算以反转2s补码因为2s补码正数与该数字相同。

现在请注意,如果您使用上面的有符号数字,则可以使用8位来表示-128到127之间的数字,因此要表示256,您必须升级到32位。

一个有趣的事情是要注意,在正数的2的补码形式中,更多的1表示更大的幅度,而对于负数0表示更大的幅度

首先很难直接解释2s补码,所以首先将每个2的补码转换成二进制,然后一旦你精通就将其解释为十进制,你可以直接判断2s补码形式的数量是多少? / p>

参考文献

http://sandbox.mc.edu/~bennet/cs110/tc/tctod.html https://www.rapidtables.com/convert/number/binary-to-decimal.html http://onlinecalculators.brainmeasures.com/Numbers/TwosComplimentCalculations.aspx https://www.quora.com/Why-computer-use-2s-complement-to-store-negative-number-instead-of-1s-complement

<强>更新 要回答你的评论:上述内容并不适用于正数。2s complement of positive number is that same number itself你可能会问为什么会这样?好吧,因为2s补充是为了减轻减法问题而发明的,所以计算机真的不必单独实现SUB电路(实际上根本没有任何SUB逻辑门。 !我们所拥有的只是AND OR而不是那为什么难以实现SUB电路

所以现在同样的电路可以用于加法和减法,它使用2s补码&#39; hack&#39;进入perform subtraction by doing addition!

因此,当您不是00000001时,{1}会将~00000001存储为11111110 现在,-2 in 2s补充形式