JAVA中“~”按位取反运算符的一些问题。
小弟初学JAVA,今天卡在“~”这个符号上了,按照书上说的是按位取反。这个定义到底是什么呢?比如5,101,加上符号位,0101.按位取反后应该是1010,答案应该是-2...
小弟初学JAVA,今天卡在“~”这个符号上了,按照书上说的是按位取反。这个定义到底是什么呢?比如5,101,加上符号位,0101.按位取反后应该是1010,答案应该是-2呀。可是,当我运行的时候,输出结果为什么是-6呢?程序如下,请各位老师赐教。。
public class BitOperation {
public static void main(String args[]){
int a=5;
System.out.println("~a="+(~a));
}
}
运算结果是-6,我用的Eclipse
kingbo777的解答很详细,可是我怎么越看越糊涂啊,这跟我大学学的编码好像不同了啊。第一位是符号位,后面的是数值,11111111 11111111 11111111 11111111 不应该是负的2的31次方吗。怎么成-1了 展开
public class BitOperation {
public static void main(String args[]){
int a=5;
System.out.println("~a="+(~a));
}
}
运算结果是-6,我用的Eclipse
kingbo777的解答很详细,可是我怎么越看越糊涂啊,这跟我大学学的编码好像不同了啊。第一位是符号位,后面的是数值,11111111 11111111 11111111 11111111 不应该是负的2的31次方吗。怎么成-1了 展开
2个回答
展开全部
首先你要知道现在我们用的多数都是32位机,所以整形数都是4个字节
那么再看看按位取反的结果:
00000000 00000000 00000000 00000101 这是5
00000000 00000000 00000000 00000000 这是0
11111111 11111111 11111111 11111111 这是-1
11111111 11111111 11111111 11111110 这是-2
11111111 11111111 11111111 11111101 这是-3
11111111 11111111 11111111 11111100 这是-4
11111111 11111111 11111111 11111011 这是-5
11111111 11111111 11111111 11111010 这是5取反的结果-6
看懂了吗?
那么再看看按位取反的结果:
00000000 00000000 00000000 00000101 这是5
00000000 00000000 00000000 00000000 这是0
11111111 11111111 11111111 11111111 这是-1
11111111 11111111 11111111 11111110 这是-2
11111111 11111111 11111111 11111101 这是-3
11111111 11111111 11111111 11111100 这是-4
11111111 11111111 11111111 11111011 这是-5
11111111 11111111 11111111 11111010 这是5取反的结果-6
看懂了吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询