开发者社区> 问答> 正文

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 次方?

展开
收起
蛮大人123 2016-02-28 14:57:19 2668 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    为Java里的int是有符号的,在内存中没有正负之分,只有0/1,整数是用补码表示的
    正数补码等于原码
    负数的补码等于其绝对值的反码+1,正好等于自身+2^32(对于4字节的整型来说)
    -1 的补码 就是 绝对值1 的反码(按位取反) 11111111 11111111 11111111 11111110 再+1
    等于 11111111 11111111 11111111 11111111
    这样正好能把最高位为1的数字用来表示负数,而最高位为0的数字表示非负数
    screenshot
    因此负数+2^32之后的二进制串,就是该负数内存中准确的存储形式.

    2019-07-17 18:49:38
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载