Java按位非运算问题

主要还是“~”这个玩意儿有点郁闷...这个东西究竟是干嘛用的....不是求补码的么?我现在有点凌乱,原码的补码不应该是本身么?为什么我在Java里定义一个整形的i然后给i... 主要还是“~”这个玩意儿有点郁闷...这个东西究竟是干嘛用的....不是求补码的么?
我现在有点凌乱,原码的补码不应该是本身么?
为什么我在Java里定义一个整形的 i 然后给 i 赋值 “1”
然后 ~i 得到的结果是 “-2”
....不应该是1么....为啥会是 “-2” 啊
展开
 我来答
瓶子快到碗里来
2014-01-21 · TA获得超过238个赞
知道答主
回答量:247
采纳率:0%
帮助的人:143万
展开全部

这个不是求补码的。

前几天写过一个,你看看吧

class Test
{
public
static void main(String[] args)
{
/*
正数取~:-(a+1)
负数取~:(a+1)
*/
 
/*
是对存于计算机的补码进行操作的。
6是正数,补码与其源码相同。为:0(符号位)...0000110(因为默认是int型所以32位)
对其~操作后为:1(符号位)...1111001
显霸气编程源码:取反加1(除去符号位)
1) 1(符号位)...0000110
2) 1(符号位)...0000111
所以最后是-7
 
*/
System.out.println(~6);//-7
/*
是对存于计算机的补码进行操作的。
-6是负数。1(符号位)...0000110
显霸气编程源码:取反加1(除去符号位)
1) 1(符号位)...1111001
2) 1(符号位)...1111010
对其~操作后为:0(符号位)...0000101
正数的补码与源码相同故为:0(符号位)...0000101
 
所以最后是5
 
*/
System.out.println(~-6);//5
}
}
追问
也就是说~这个运算符不是求补?
追答
不是,这个是 按位非 运算符,把操作数在计算机底层的二进制码 按位取反。
匿名用户
2014-01-21
展开全部
详细过程如下:⑴1的补码为0000 0001按位求反后变为1111 1110因为此数为负数,将这个结果从补码变为原码:1、先求反,最高位(符号位)不变:1000 00012、再加1:1000 0010;结果即为-2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaoxiaoyuer93
2014-01-21
知道答主
回答量:8
采纳率:0%
帮助的人:1.1万
展开全部
java中没有“~”的使用方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式