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

关于java中的逻辑运算符问题

public static void main(String[] args) {
System.out.println(~1);
}


上面这段代码为什么打印2?
请从原理的角度解释,谢谢!

------解决方案--------------------
答案应该是-2吧!
假设1的补码是00000001b,~1就是将1的补码全部取反,为11111110b.
而11111110b的值则为-2.
------解决方案--------------------
1的二进制
0000 0000 0000 0000 0000 0000 0000 0001
~表示取反得
1111 1111 1111 1111 1111 1111 1111 1110

这是补码,第一位符号位为1,表示是负数,其绝对值通过 反码+1 可算出

反码得:
0000 0000 0000 0000 0000 0000 0000 0001
加一后得
0000 0000 0000 0000 0000 0000 0000 0010

刚才说了结果是负数,绝对值就上上面这个二进制,它是2
最终结果为-2