为什么~2等于-3?~操作符是如何工作的?
当前回答
我知道这个问题的答案很久以前就贴出来了,但我想分享我的答案。
要找到一个数的一补,首先要找到它的二进制等价物。这里,十进制数字2用二进制形式表示为0000 0010。现在通过将其二进制表示的所有数字逆(将所有1都翻转为0,将所有0都翻转为1)来求其1的补数,这将得到:
0000 0010 → 1111 1101
这是十进制数2的1补。由于二进制数的第一个位,即符号位为1,这意味着它存储的数字的符号为负。(这里所指的数字不是2,而是2的1的补数)。
现在,由于数字存储为2的补数(取1的补数加1),所以要将这个二进制数1111 1101显示为十进制,首先我们需要找到它的2的补数,即:
1111 1101 → 0000 0010 + 1 → 0000 0011
这是2的补。二进制数0000 0011的十进制表示是3。并且,因为符号位是1,所以结果是-3。
提示:如果你仔细阅读这个过程,你会发现1的补码操作符的结果实际上是,数字(操作数-,这个操作符被应用)加1,带一个负号。你也可以用其他数字试试。
其他回答
我认为对于大多数人来说,困惑的部分来自于十进制数和有符号二进制数的区别,所以让我们先澄清一下:
对于人类十进制世界: 01表示1, -01表示-1, 对于计算机的二进制世界: 101是无符号的,表示5。 101的意思是(-4 + 1),如果是有符号的数字在x位置。 | x
所以2的翻转位= ~2 = ~(010)= 101 = -4 + 1 = -3 这种混淆是由于混淆了有符号的结果(101=-3)和没有符号的结果(101=5)
位补操作符(~)是一个一元操作符。
它的工作原理如下
首先,它将给定的十进制数转换为相应的二进制数 价值。这是在2的情况下,它首先将2转换为0000 0010(到8位二进制数)。
然后它将数字中的所有1都转换为0,所有0都转换为1,然后数字将变成11111101。
这是-3的2的补表示。
为了找到无符号的值使用补,即。要简单地将1111 1101转换为十进制(=4294967293),只需在打印时使用%u。
这里,二进制(8位)中的2是00000010,它的1的补码是11111101, 1的补数减去1得到1111110 -1 = 11111100, 这里的符号是-作为第8个字符(从R到L)是1 求1的补,no。即00000011 = 3 符号是负的所以这里是-3。
我知道这个问题的答案很久以前就贴出来了,但我想分享我的答案。
要找到一个数的一补,首先要找到它的二进制等价物。这里,十进制数字2用二进制形式表示为0000 0010。现在通过将其二进制表示的所有数字逆(将所有1都翻转为0,将所有0都翻转为1)来求其1的补数,这将得到:
0000 0010 → 1111 1101
这是十进制数2的1补。由于二进制数的第一个位,即符号位为1,这意味着它存储的数字的符号为负。(这里所指的数字不是2,而是2的1的补数)。
现在,由于数字存储为2的补数(取1的补数加1),所以要将这个二进制数1111 1101显示为十进制,首先我们需要找到它的2的补数,即:
1111 1101 → 0000 0010 + 1 → 0000 0011
这是2的补。二进制数0000 0011的十进制表示是3。并且,因为符号位是1,所以结果是-3。
提示:如果你仔细阅读这个过程,你会发现1的补码操作符的结果实际上是,数字(操作数-,这个操作符被应用)加1,带一个负号。你也可以用其他数字试试。
这个操作是补语,不是否定语。
考虑~0 = -1,然后从这里开始。
否定的算法是,“补,加”。
你知道吗?还有一种“一的补”,它的逆数是对称的,它有一个0和一个-0。