Java按位非运算问题
主要还是“~”这个玩意儿有点郁闷...这个东西究竟是干嘛用的....不是求补码的么?我现在有点凌乱,原码的补码不应该是本身么?为什么我在Java里定义一个整形的i然后给i...
主要还是“~”这个玩意儿有点郁闷...这个东西究竟是干嘛用的....不是求补码的么?
我现在有点凌乱,原码的补码不应该是本身么?
为什么我在Java里定义一个整形的 i 然后给 i 赋值 “1”
然后 ~i 得到的结果是 “-2”
....不应该是1么....为啥会是 “-2” 啊 展开
我现在有点凌乱,原码的补码不应该是本身么?
为什么我在Java里定义一个整形的 i 然后给 i 赋值 “1”
然后 ~i 得到的结果是 “-2”
....不应该是1么....为啥会是 “-2” 啊 展开
展开全部
这个不是求补码的。
前几天写过一个,你看看吧
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
}
}
追问
也就是说~这个运算符不是求补?
追答
不是,这个是 按位非 运算符,把操作数在计算机底层的二进制码 按位取反。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询