关于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
------解决方案--------------------补码,原码,反码
------解决方案--------------------
------解决方案--------------------数字电路实现,有相应门电路。