public class Test { public static void main(String[] args){ int a=5; String stra=Integer.toBinaryString(a); int b=~a; String strb=Integer.toBinaryString(b); //String strb="11111111111100010011111111111111"; int c=Integer.parseInt(strb,2);//发现strb是32位就出错 学艺不精 同等高人来解 System.out.println(stra); System.out.println(strb); System.out.println(c); } }
public class Test {
public static void main(String[] args){
int a=5;
String stra=Integer.toBinaryString(a);
int b=~a;
String strb=Integer.toBinaryString(b);
//String strb="11111111111100010011111111111111";
int c=Integer.parseInt(strb,2);//发现strb是32位就出错 学艺不精 同等高人来解
System.out.println(stra);
System.out.println(strb);
System.out.println(c);
}
}
java 中int 是4个字节
5 : 00000000 00000000 00000000 00000101
5取反: 11111111 11111111 11111111 11111010
取反后再换成补码输出:
(10000000 00000000 00000000 00000110)B = -6
补码的规定如下:
对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+1=11010110)
0的补码是唯一的,都为 00000000。现在分析你的
5补码为00000101
取反11111010,刚才说了,最高位表示符号,现在最高位是1,代表负数,负数怎么来的?绝对值取反,所以退回去就成了(也就是先求出绝对值就成了),
11111010-1=11111001,再反回去,00000110,所以这个绝对值是6,那么因为它是负数,所以是-6,明白?