日期:2014-05-20  浏览次数:20791 次

关于java 位运算取反"~"的问题?
这是一个困扰我好久的问题了,为什么??? ~1=-2 ?, ~(-1)=0 ?
  位运算符“~”,它内计算机内是怎样计算的,它计算的逻辑是什么?是完全不取反?
 
  而我是这样理解这其中的逻辑的,也不知对还是不对? 这里假设一个8 Bit 的有符号二进制码?

  那么1的二进制原码表示为:0000 0001 ,因为是正数所以它的原码,反码与补码均相同。
  -1的二进制原码表示为: 1000 0001 ,而-1的反码为:1111 1110 补码为:1111 1111
   
  所以 在 1 取反时为:1111 1110 ,又 1111 1110 是以补码表示的,
  那么1111 1110 表示的原码值为:1000 0010 等于 -2;(原码=取反(反码=补码-1))。

  而-1 在这里就行不通了。
  所以想请教各路高手给小弟说说:位取反操作到底是怎么一回事,要是能顺便讲讲,原码,反码与补码,的关系那么就更好了。
  在此,先谢喽!!!
   
   
   
   



   


 






------解决方案--------------------
补码,原码,反码,大学最开始学的,现在不查资料很难一下子说正确哦!
------解决方案--------------------
负数的二进制补码表示这样就可以计算了出来了。

1:先将负数中的负号去掉变成正数,使用二进制表示这个正数
2:将这个二进制正数所有的位取反,再加 1,结到的二进制序列就是这个负数的补码

比如:-1,取其正值 1,32 位二进制表示为:0000 0000 0000 0000 0000 0000 0000 0001

各位全部取反:1111 1111 1111 1111 1111 1111 1111 1110

再加 1:1111 1111 1111 1111 1111 1111 1111 1111

因此 -1 的二进制补码表示为:1111 1111 1111 1111 1111 1111 1111 1111
------解决方案--------------------
补码,原码,反码
------解决方案--------------------
探讨

呵呵,能不能就给小弟说说:-1 取反的反的结果为什么是0 ? 要是有步骤那就更好了 !!!

------解决方案--------------------
数字电路实现,有相应门电路。