为什么~2等于-3?~操作符是如何工作的?
当前回答
简单的 ...........
作为任何数字的2的补,我们可以通过将所有1逆为0来计算,反之亦然,然后再加上1。
这里N= ~N产生的结果总是-(N+1)。因为系统以2的补码的形式存储数据,这意味着它像这样存储~N。
~N = -(~(~N)+1) =-(N+1).
例如::
N = 10 = 1010
Than ~N = 0101
so ~(~N) = 1010
so ~(~N) +1 = 1011
点就是负的原点。我的观点是假设我们有32位寄存器,这意味着2^31 -1位涉及到操作,剩下的一位在早期计算(补码)中被存储为符号位,通常为1。结果是~10 = -11。
~(-11) =10;
如果printf("%d",~0);结果是-1;
但printf(“%u”,~0)比结果:4294967295在32位机器上。
其他回答
我知道这个问题的答案很久以前就贴出来了,但我想分享我的答案。
要找到一个数的一补,首先要找到它的二进制等价物。这里,十进制数字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。
简单的 ...........
作为任何数字的2的补,我们可以通过将所有1逆为0来计算,反之亦然,然后再加上1。
这里N= ~N产生的结果总是-(N+1)。因为系统以2的补码的形式存储数据,这意味着它像这样存储~N。
~N = -(~(~N)+1) =-(N+1).
例如::
N = 10 = 1010
Than ~N = 0101
so ~(~N) = 1010
so ~(~N) +1 = 1011
点就是负的原点。我的观点是假设我们有32位寄存器,这意味着2^31 -1位涉及到操作,剩下的一位在早期计算(补码)中被存储为符号位,通常为1。结果是~10 = -11。
~(-11) =10;
如果printf("%d",~0);结果是-1;
但printf(“%u”,~0)比结果:4294967295在32位机器上。
首先,我们必须把给定的数字分成它的二进制数,然后把它颠倒过来,把最后一个二进制数相加。执行完后,我们必须给我们正在寻找补数的前一位数字赋相反的符号 ~ 2 = 3 解释: 2的二进制形式是00000010变成11111101,这是1的补码,然后补码为00000010+1=00000011,这是3的二进制形式,带-符号,即-3
我认为对于大多数人来说,困惑的部分来自于十进制数和有符号二进制数的区别,所以让我们先澄清一下:
对于人类十进制世界: 01表示1, -01表示-1, 对于计算机的二进制世界: 101是无符号的,表示5。 101的意思是(-4 + 1),如果是有符号的数字在x位置。 | x
所以2的翻转位= ~2 = ~(010)= 101 = -4 + 1 = -3 这种混淆是由于混淆了有符号的结果(101=-3)和没有符号的结果(101=5)