2 pfeffer Pfeffer 于 2017.09.02 04:24 提问

关于位运算符和一个程序的异常

图片说明图片说明

1.为什么3取反得到的是-4, 我在草稿纸上的演算, 对3取反之后的二进制数再取反加一,才得到-4,这不是补码的运算过程吗?
2.第二个的程序异常真不知道为啥.

2个回答

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.02 09:39
已采纳

【1】有符号数,3=【0000 0011】,取反~3=【1111 1100】=-4,,,
负数的话二进制转10进制就是取反加1,,加负号。**~0,等于-1**

【2】第二个程序,,很神奇,,注释都能出错,,还给精确爆出错误位置,,编译器该换了。把这个括号换一下,,试试

图片说明

phenomenonsTell
phenomenonsTell   2017.09.02 09:43

1.你的答案错了
你这样看更直观:

 System.out.println(Integer.toBinaryString(~3));

我的eclipse运行的结果:11111111111111111111111111111100
所以正数是直接按位取反,得到-4

2.大哥啊,这个是编译器的问题把,我的eclipse不报错。。。尴尬

Csdn user default icon
上传中...
上传图片
插入图片