十进制小数分数与二进制的转换

十进制小数分数与二进制的转换十进制分数转换为二进制数使用短除法。例如将十进制分数11/28转换为二进制数,过程如下:1、首先将分子分母分别转换成二进制(11)10=(1011)2(28)10=(11100)22、使用短除,借位时是借2,商只能是0或1所以:11/28=1011/11100=0.01100100…十进制小数转换为二进制小数十进制数的整数位是二进制数的整数位,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

 

十进制分数转换为二进制数
使用短除法。

例如将十进制分数11/28转换为二进制数,过程如下:
1、首先将分子分母分别转换成二进制 
(11)10=(1011)2 
(28)10=(11100)2 

2、使用短除,借位时是借2,商只能是0或1 

 十进制小数分数与二进制的转换
     所以:11/28=1011/11100=0.01100100…

十进制小数转换为二进制小数

十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位。两部分分开转换。

整数部分 除以2取余,逆序排列。
小数部分 乘 2 取整,顺序排列。

例如转换十进制小数11.4,过程如下。

计算整数部分,11转换为二进制位1011:

十进制小数分数与二进制的转换

计算小数部分0.4,首先将小数部分一直乘2,积的整数部分顺序取出:
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.8*2=1.6      取1      |
0.6*2=1.2      取1      |
0.2*2=0.4      取0      |

可以看出0110是循环,因此小数部分的二进制是
0.01100110……(循环0110)

最终结果是整数位和小数位合并1101111.01100110……(2)
 

二进制小数转换为十进制小数
使用按权展开求和法,小数点左边是2的正数次方,从0开始;小数点右边是2的负数次方,从-1开始。 

例如将101.111(2)转换成十进制数

                1*(2^2)+0*(2^1)+1*(2^0)       # 整数部分

  + 1*(2^(-1))+1*(2^(-2))+1*(2^(-3))       # 小数部分

                                              =5.875
 

附 python 版十进制与二进制转换

 

# coding=UTF-8
from decimal import Decimal


def dec2bin(n, bit=20):
    """
    n, integer or float to convert
    bit, bits after point
    return binary, string
    """
    negative = False
    if n < 0:
        negative = True
        n *= -1

    integer = int(n)
    decimal = n - integer
    binary = ""

    if n == 0:
        return "0"

    while integer != 0:
        result = int(integer % 2)
        integer /= 2
        binary = str(result) + binary

    if decimal != 0:
        i = 0
        decimal_bin = ""  # binary decimal after convert
        while decimal != 0 and i < bit:
            result = int(decimal * 2)
            decimal = decimal * 2 - result
            decimal_bin += str(result)
            i += 1
        binary = binary + '.' + decimal_bin

    if negative:
        binary = '-' + binary

    return binary

def bin2dec(n):
    """
    n binary, support point
    return integer or float
    """
    negative = False
    if n < 0:
        negative = True
        n *= -1

    integer = int(n)
    decimal = n - integer

    if integer != 0:
        integer_str = str(integer)
        length = len(integer_str)

        integer = 0
        for i in xrange(0, length):
            bit = int(integer_str[i])
            if bit == 1:
                integer += 2 ** (length - i - 1)
            elif bit != 0:
                print "invalid integer:" + str(n)

    if decimal != 0:
        decimal_str = str(decimal)[2:] # skip "0."
        length = len(decimal_str)

        decimal = 0
        for i in xrange(0, length):
            bit = int(decimal_str[i])
            if bit == 1:
                decimal += 2 ** (-1 * (i + 1))
            elif bit != 0:
                print "invalid decimal:" + str(n)

    result = integer + decimal

    if negative:
        result *= -1

    return result


def testcases():
    for pair in [(125, '1111101'),
                 (1.3, '1.01001100110011001100'),
                 (2.5, '10.1'),
                 (0, '0'),
                 (-1, '-1'),
                 (0.5, '.1')]:
        assert pair[1] == dec2bin(pair[0])

    for pair in [(-1001.1100, -9.75),
                 (-1101, -13),
                 (111.111, 7.875),
                 (0.1101, 0.8125),
                 (1001, 9),
                 (0, 0),
                 (0.1, 0.5)]:
        assert pair[1] == bin2dec(pair[0])

    print "all test case success"


if __name__ == "__main__":
    # testcases()
    print bin2dec(0.5)

 

 

 

参考:

 

 

 

http://blog.csdn.net/caoguo_app_android/article/details/9955743

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189702.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 《自然语言处理实战入门》 第三章 :中文分词原理及相关组件简介 —- 语言学与分词技术简介[通俗易懂]

    汉语,即汉族的语言,是中国通用语言,国际通用语言之一,属汉藏语系,汉语历史悠久,使用人数最多,世界上使用汉语的人数至少15亿,超过世界总人口的20%汉字最早起源于商朝的甲骨文,距今已经有3000-4000年的历史了。文字的目的是为了记录,古汉语以独字为核心,即使隋唐以后汉语书面语逐渐向口语化发展。

  • 调查发现女人比男人更喜欢使用社交网站(组图)

    调查发现女人比男人更喜欢使用社交网站(组图)男人更喜欢语音/电话交流女人比男人更喜欢使用社交网站  北京时间9月25日上午消息,根据市场研究机构Rebtel发布的最新调查结果,女人更喜欢通过社交网站与家人、朋友及同事联系,而男人更喜欢用电话与家人、朋友及同事联系。  Rebtel在今年5月17日至19日对美国2361名18岁以上成年人进行了这项调查,旨在揭示一个问题,即一旦美国成年人只能使用一种通讯…

  • vue slot插槽_vue插槽的使用场景

    vue slot插槽_vue插槽的使用场景为什么使用slotslot(插槽)在生活中很多地方都有插槽,电脑usb的插槽,插板当中的电源插槽插槽的目的是为了让我们原来的设备具备更多的扩展性比如电脑的USB我们可以插入U盘,手机,鼠标,键

  • Python 基础语法(一)「建议收藏」

    Python 基础语法(一)「建议收藏」Python的特点1.简单Python是一种代表简单思想的语言。2.易学Python有极其简单的语法。3.免费、开源Python是FLOSS(自由/开放源码软件)之一。4.高层语

  • 如何查看端口号被占用情况_怎么查端口被哪个程序占用了

    如何查看端口号被占用情况_怎么查端口被哪个程序占用了最近在工作上Ranorex自动化测试工具老是连不上服务器,经检查发现服务器的端口号(7266)被其他测试工具占用。可以在命令窗口上输入netstat-ano查看本机的所有端口号以及对应的进程占用程序(PID)。打开任务管理器,找到与端口对应的PID,将其关闭,最后重启。…

  • Ubuntu安装超好用的Edge浏览器

    Ubuntu安装超好用的Edge浏览器Edge与Chrome都基于开源浏览器Chromium。但是Chrome由与众所周知的原因,扩展商店,翻译等服务延迟高,并不好用。相比较Edge体验起来会更流畅。但是通过官方地址https://www.microsoft.com/zh-cn/edge并没有Linux版本。这里可以通过https://www.microsoftedgeinsider.com/zh-cn/下载官方内部版本。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号