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 次方?
为Java里的int是有符号的,在内存中没有正负之分,只有0/1,整数是用补码表示的
正数补码等于原码
负数的补码等于其绝对值的反码+1,正好等于自身+2^32(对于4字节的整型来说)
-1 的补码 就是 绝对值1 的反码(按位取反) 11111111 11111111 11111111 11111110 再+1
等于 11111111 11111111 11111111 11111111
这样正好能把最高位为1的数字用来表示负数,而最高位为0的数字表示非负数
因此负数+2^32之后的二进制串,就是该负数内存中准确的存储形式.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。