首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2013-01-22 
关于java中的逻辑运算符问题public static void main(String[] args) {System.out.println(~1)}上面这段

关于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

热点排行
Bad Request.