public class Sample {
public static void main(String[] args) {
int a=4;
System.out.println(~a);
}
}
求高手解释一下,为什么输出-5,麻烦讲清楚点

解决方案 »

  1.   

    (~a);是逐位取反的意思。int是4位 ,a的值为4,所以他的二进制为00000000 00000000 00000000 00000100
    取反是11111111 11111111 11111111 11111011 最高位为符号位,1为负 0为正,而负数的表示为他的补码,转换为十进制为 除了符号位不变,其余取反加1 也就是10000000 00000000 00000000 00000101   结果就是-5啦
      

  2.   

    二楼的最高位指的那位?顺手牵羊解释一下
    int i=-5;
    System.out.println(~i);
    为什么输出4
      

  3.   

    我上面可能解释的不是很详细。下面详细说下,相信以后楼主一定对这种题颇有心得了。呵呵
    在二进制的世界里,负数是以补码的形式存放在内存中的,而正数就是以原码的形式存放的,所以下面我只解释下补码的计算,补码=反码+1。所谓的反码就是 将负数的原码除最高位不变(也就是符号位,为1时,表示负,为0时,表示正。下面红色标识)以外的其他位都按位取反。(下面还是以-5为例子)
    -5原码:10000000 00000000 00000000 00000101。那么-5的反码相应就是:
    111111111 11111111 11111111 11111010
    这时求负数的补码就用反码加1了。也就是负数的最终保存形式:11111111 11111111 11111111 11111011
    那么针对楼主说的,int i=-5;也就是将11111111 11111111 11111111 11111011按位取反了,所以结果是:
    00000000 00000000 00000000 00000100。所以System.out.println(~i);输出的是4。