作业帮 > 综合 > 作业

Java按位非运算问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/27 23:56:26
Java按位非运算问题
主要还是“~”这个玩意儿有点郁闷...这个东西究竟是干嘛用的.不是求补码的么?
我现在有点凌乱,原码的补码不应该是本身么?
为什么我在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
}
}
再问: 也就是说~这个运算符不是求补?
再答: 不是,这个是 按位非 运算符,把操作数在计算机底层的二进制码 按位取反。