Java 的 Integer.toBinaryString 方法

public static String toBinaryString(int i)

    //以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 
    //如果参数为负,该无符号整数值为参数加上 2^32;否则等于该参数。

        System.out.println(Integer.toBinaryString(-1)) ;
        System.out.println(Integer.toBinaryString(2)) ;
        System.out.println(Integer.toBinaryString(1)) ;

    输出:
        11111111111111111111111111111111
        11111111111111111111111111111110
        1

结论输出的是数字的二进制补码。

于是我对这个方法的作用解释很不理解,为什么说是以 二进制无符号整数形式 返回一个 整数类型的字符串,为什么 如果参数为负数,就要加上 232 次方

阅读 14.4k
1 个回答

因为Java里的int是有符号的,在内存中没有正负之分,只有0/1,整数是用补码表示的

正数补码等于原码
负数的补码等于其绝对值的反码+1,正好等于自身+2^32(对于4字节的整型来说)

-1 的补码 就是 绝对值1 的反码(按位取反) 11111111 11111111 11111111 11111110+1
等于 11111111 11111111 11111111 11111111

这样正好能把最高位为1的数字用来表示负数,而最高位为0的数字表示非负数

10000000 00000000 00000000 00000000 => -2147483648
11111111 11111111 11111111 11111111 => -1
00000000 00000000 00000000 00000000 => 0
00000000 00000000 00000000 00000001 => 1
01111111 11111111 11111111 11111111 => 2147483647

因此负数+2^32之后的二进制串,就是该负数内存中准确的存储形式

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏