您的位置:首页 > 编程语言 > Java开发

JAVA中负数转二进制分析

2014-09-09 14:24 127 查看
最近在看集合源码,发现ArrayDeque里面用到了大量的&运算,这牵扯到了二进制。突然发现自己对负数的二进制有点模糊了,对此进行了一些支持补充。
首先我们要对原码、反码和补码有个了解:

1、所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

2、反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

原码10010= 反码11101 (10010,1为符号码,故为负)

(11101) 二进制= -13 十进制

3、补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

举一例,我们来看整数-1在计算机中如何表示。

假设这也是一个int类型,那么:

1、先取1的原码:00000000 00000000 00000000 00000001

2、得反码:     11111111 11111111 11111111 11111110

3、得补码:     11111111 11111111 11111111 11111111
十六进制表示: 0xFFFFFFFF
所以Java中Integer.toBinaryString(-5)结果为11111111111111111111111111111011. Integer是32位(bit)的.

负数的二进制规律:
1、取负数的绝对值的原码;
2、计算原码的反码;
3、对反码加一,获取补码。

作者:伫望碧落 出处:http://blog.csdn.net/cl05300629
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息