JAVA路漫漫系列之二进制详解

如同十进制,逢十进一, 借一当十

二进制就是,逢二进一,借一当二

二进制数:

1(2) -- 1(10)

10(2) -- 2(10)

11(2) --- 3(10)

100(2) -- 4(10)

......

为什么要了解二进制 ?

因为计算机存储和计算数据时,就是以二进制的形式处理的。

1 十进制与二进制的转换

十进制 --》 二进制 除2反向取模

10 /2 = 5...0

5/2 = 2...1

2/2= 1...0

1/2= 0....1 = 1010

二进制 --》十进制 *2相加

1010 = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0

         = 1*8 + 0*4 + 1*2 + 0*1

         = 10

2 小数的二进制表示

13.625

整数部分13转换成二进制

13/2 = 6 - 1

6/2 = 3 - 0

3/2 = 1 - 1

1/2 = 0 -1

13 ——》 1101

小数部分0.625转换成二进制

0.625 * 2 = 1.25 -- 1

0.25 * 2 = 0.5 -- 0

0.5* 2 = 1.0 --- 1

0.0*2 = 0---- 0

0.625 ——》 0.101

13.625 ——》 1101.101

二进制整数部分 增加一位*2

1 2 4 8 16 32 .....

2^0 2^1 ....

二进制小数部分 增加一位除2

0.5 0.25 0.125 ...

2^-1 2^-2 ....

1/2 1/4 1/8 ....

注意:十进制小数部分只有是0.5 , 0.25 , 0.125 ... 这一系列有规律的小数组合才能完全转换成二进制小数,否则会出现精度误差

0.4 * 2 = 0.8 0

0.8*2 = 1.6 1

0.6*2 = 1.2 1

0.2*2=0.4 0

0.4*2=0.8 0

0.4 ~ 0.0110011 -> 0.4

3 二进制的正负表示

最高位表示符号位 , 0 正 , 1 负 (假设8位)

+10 -> 0000 1010

-10 -> 1000 1010

4 原码 反码 补码

计算机存储和计算二进制时,使用的是二进制补码

需要先了解什么原码 , 反码, 补码

正数的原码与反码,补码相同,所以只研究负数原码,反码和补码的关系特点。

原码:十进制通过转换规则,转换成二进制数就称为原码

补码 : 与原码互补 , 原码 与 补码 相加 各位均为0,整体进1

补码计算:

-10(10进制) --》 1 1010(二进制原码) + ?(补码) = 1 10000

? = 10000 - 01010 = 00110 = 1 0110(补)

发现:1 0110(补码) -1 = 10101 = 1 1010(原码)按位取反

总结:负数原码的符号位不变,其余位数取反再+1 = 补码

-12 = 1 1100(原码) = 1 0011(取反) + 1 = 10100(补码)

反码:负数原码的符号位不变,其余位数取反

5 原码 反码 补码计算

原码在进行减法计算时比较麻烦

5 - 7 = 5 +(-7) = 2

0000 0101 + 1000 0111

最终的计算结果和绝对值最大的那个的数的符号相等 1

大数-小数 0111 - 0101 = 1000 0010 = -2

(-)7-5

反码在计算减法时,比较简单,可以将符号也参与运算

5-7

0000 0101 + 1000 0111

0000 0101(反) + 1111 1000(反) = 1111 1101(反) -> 1000 0010 = -2

3 - 5

0000 0011 + 1000 0101

0000 0011(反) + 1111 1010(反) = 1111 1101(反) = 1000 0010(原) = -2

5-5 = 5+(-5)

0000 0101 + 1000 0101

0000 0101 + 1111 1010 = 1111 1111 (反) = 1000 0000 = -0

如果使用反码计算, 0就会有2种表示 +0 , -0

补码计算减法 ,比较简单,符号位可以直接参与运算

5-7 = 5+(-7)

0000 0101 + 1000 0111

0000 0101(反) + 1111 1000(反)

0000 0101(补) + 1111 1001(补) = 1111 1110(补) -1 = 1111 1101(反) = 1000 0010 = -2

5-5 = 5+(-5)

0000 0101 + 1000 0101

0000 0101 + 1111 1010

0000 0101 + 1111 1011(补) = 1111 1112 = 0000 0000(补) = 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值