Java 的 Integer.toBinaryString 方法
PHP中文网
PHP中文网 2017-04-17 13:11:04
0
1
582
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 次方

PHP中文网
PHP中文网

认证0级讲师

全員に返信(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之后的二进制串,就是该负数内存中准确的存储形式

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!