二进制转换

整数

正整数

实例

十进制2的次幂二进制
1200001
2210010
321 + 200011
4220100
522 + 200101
622 + 210110
722 + 21 + 200111
8231000

分析

比如:100转成二进制
1, 转成2的次幂:100 = 26 +25+22
2,0000 0000 根据 26中的6,再+1 即7,从左至右的第7位改为1: 0100 0000
3,0100 0000 根据 25中的5,再+1 即6,从左至右的第6位改为1: 0110 0000
4,0110 0000 根据 22中的2,再+1 即3,从左至右的第3位改为1: 0110 0100
即 100 的二进制为:0110 0100
代码验证一下,我们计算出来的结果是否正确
在这里插入图片描述
验证通过

总结

1,待转换的数字n,转成2的次幂
2,根据次幂结果,在各个对应位置设置为1,其他为0

负整数

比如-100转换成二进制
1,-100 的绝对值:100
2,100转成二进制0110 010
3,原码:1000 0000 0000 0000 0000 0110 0100(100的二进制,最高位设置符号位,负数的最高位要设置成1)
4,反码:1111 1111 1111 1111 1111 1111 1001 1011(除符号位外,0变成1,1变成0)
5,补码:1111 1111 1111 1111 1111 1111 1001 1100(在补码的基础上+1)
即 -100 的二进制为:1111 1111 1111 1111 1111 1111 1001 1100
代码验证一下,我们计算出来的结果是否正确
在这里插入图片描述
验证通过

总结

1,待转换的数字-n,进行绝对值,获取正整数n
2,根据该正整数n获取二进制
3,该二进制加上符号位,变成原码
4,在原码基础上,除符号位外,0变1,1变0,变成反码
5,在反码基础上,再+1,得出的即是负数的二进制了

小数

正小数

比如:0.05转成二进制

计算整数位小数位
0.05 (待转换的数字)* 2 = 0.100.1
0.1(上次计算结果的小数) * 2 = 0.200.2
0.2(上次计算结果的小数) * 2 = 0.400.4
0.4(上次计算结果的小数) * 2 = 0.800.8
0.8(上次计算结果的小数) * 2 = 1.610.6
0.6(上次计算结果的小数) * 2 = 1.210.2
0.2(上次计算结果的小数) * 2 = 0.400.4
0.4(上次计算结果的小数) * 2 = 0.800.8
0.8(上次计算结果的小数) * 2 = 1.610.6
0.6(上次计算结果的小数) * 2 = 1.210.2

分析

  • 计算二进制
    1,整个计算在:0.2 0.4 0.8 1.6 …不停的循环
    2,我们把整数位的结果拼接在一起:0000110011…
    3,在结果集的前缀上追加0.标识:0.0000110011…
    通过以上结算方式得到0.05的二进制结果为0.00 0011 0011 0011 0011 0011 …

  • 我们通过在线转换工具测试一下我们的结果
    在这里插入图片描述

  • 发现结果不一样
    我们的结果是:
    0.00 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011
    在线工具的结果是:
    0.00 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 01
    看黄色部分,发现结果有细微的差距
    据我猜测,这是在线工具的不能显示更多位,进行了进位导致的,我们基本上可以忽略
    我们的计算还是更精确的

总结

1,根据带转换数字,进行 *2 计算,每次的结果的小数位,继续 *2
2,每次的计算结果的整数位拼接在一起,加上0.,就变成了二进制

思考

float在进行转换二进制的时候.,计算出来的结果,出现这种不端循环的,float会自动截取,这样就会导致float数据损失,在float数据在进行计算的时候,就出现了精度损失

负小数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值