标题的答案:
~2=-3
~-3=2
原理是什么?我们先来看这个程序及输出的结果:

容易总结出这样一个结论:~i=-i-1
为什么呢?
一言以蔽之,~运算符是对i的补码(含符号位)进行取反。
2的原码是0000 0010 正数补码是其本身0000 0010
取反(含符号位)后补码变成1111 1101 此时补码为负数,换成原码要符号位不变,减去1,再取反,即原码成了1000 0011 即为-3
-5的原码是1000 0101 负数的补码是原码符号位不变、取反并+1,因此补码是1111 1011 ,对补码取反(含符号位) 此时补码为0000 0100 补码此时符号位是正,因此原码也是0000 0100 即为4
因此,~i=-i-1。
如果想要更充分的理解这个结论,来考虑一下,对任意一个二进制数取反的含义是什么?1010取反是0101
0100取反是1011,容易看出取反的本质就是找一个数和原来的相加得到每一位均为1的数,因此要找的数就是2^M-1-a,M是位数(例如1010有四位,15-10=5,5就是0101)
本文探讨了计算机中的位操作符`~`的工作原理,通过实例解释了为什么`~i=-i-1`。文章详细解析了正数和负数在二进制表示下取反的过程,阐述了取反的本质是找到一个数与原数相加得到全1的二进制数。通过这个过程,我们可以更好地理解二进制补码表示法以及位操作在编程中的应用。
9719





