Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
首页 › 算法 › Python 四位一并法

Python 四位一并法

Jacky
10月 2, 2019算法阅读 3,287

0x00 题目

请写一个 Python 程序实现实数的「三位一并法」与「四位一并法」。输入一个八进制小数,利用三位一并法将其转换为二进制实数,并输出,再利用四位一并法将上一步得到的二进制实数转换为十六进制实数,并输出。e.g. 输入 2.04(8) 输出 010.00100(2) 和 2.1(16)。

0x01.知识储备

二进制与十六进制数之间的对应关系

二进制数十六进制数
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010A
1011B
1100C
1101D
1110E
1111F

二进制转化为十六进制的方法是,三位一并法

举个栗子 010.000100(2) 的转化,以小数点为界,整数和小数部分内每四位数为一组进行分组进行转化。因为分组时无法凑足三位,需要补位。

对整数部分,在最左边补充0,对于小数部分,在最右边补充0,即:

二进制数0010.00010000
十六进制数2.10

十六进制转二进制的方法,三位一并法的逆用

举个粒子

十六进制数E.E4
二进制数1110.11100100

0x02. Python 的实现

# coding=utf-8
import re

print('请输入一个八进制小数:')
oct_num = input()
binary = ''
is_minus = False
# 三位一并法逆用: 8进制小数转2进制小数
for o in oct_num:
    if o == '.':
        binary += '.'
    elif o == '-':
        # 处理负数
        binary += ''
        is_minus = True
    else:
        binary += format(int(o), '03b')

# 负数处理
sym = '-' if is_minus is True else ''
print(sym + binary)

# 四位一并法2进制小数转16进制小数
binary = binary.split('.')


def cov(binary_num):
    # 补位使整数和小数部分均可被 4 整除
    # 此函数返回需要补充的0字符串
    remainder = len(binary_num) % 4
    if remainder == 0:
        return ''
    else:
        return (4 - remainder) * str(0)


binary[0] = cov(binary[0]) + binary[0]  # 整数部分补位补在前面
binary[1] += cov(binary[1])  # 小数部分补位补在后面

print(binary[0] + '.' + binary[1])

# 四位一组切割字符串变成一个元组
t1 = re.findall(r'.{4}', binary[0])
t2 = re.findall(r'.{4}', binary[1])

print(t1)
print(t2)

oct_num1 = ''
for i in t1:
    oct_num1 += format(int(i, 2), 'x')

oct_num2 = ''
for i in t2:
    oct_num2 += format(int(i, 2), 'x')

# 处理掉首位出现0的情况,不明白可以注释掉下面两行然后运行脚本尝试
if oct_num1[0] == '0':
    oct_num1 = oct_num1[1:]

print(sym + oct_num1 + '.' + oct_num2)

文章最后修订于 2020年8月31日

赞(1)
本文系作者 @Jacky 原创发布在 Jacky's Blog。未经许可,禁止转载。
Python 三位一并法
上一篇
-128 的八位原码、反码、补码
下一篇
再想想
暂无评论
近期评论
  • Jacky发表在《Nginx UI》
  • daiwenzh5发表在《Nginx UI》
  • Jacky发表在《Nginx UI》
  • daiwenzh5发表在《Nginx UI》
  • Jacky发表在《Nginx UI》
1
  • 1
  • 0
Copyright © 2016-2023 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
# Mac # # Apple # # OS X # # iOS # # macOS #
Jacky
PHP C C++ Python | 舞象之年 | 物联网工程
174
文章
169
评论
267
喜欢