当前位置: 首页 > article >正文

【笔记】进制转换

文章目录

    • 一、任意进制转十进制
      • 1、整数转化成十进制
        • (1)二进制转十进制
        • (2)八进制转十进制
      • 2、小数转化成十进制
        • (1)二进制转十进制
        • (2)八进制转十进制
      • 3、代码
      • 1、整数转化成十进制
      • 2、小数转化成十进制
    • 二、十进制转任意进制
      • 1、十进制整数转化成其他进制
      • 2、十进制小数转化成其他进制
    • 例题
      • 1、十进制整数转化成其他进制
      • 2、十进制小数转化成其他进制
    • 例题

一、任意进制转十进制

基数:表示基本数字符号的个数。
比如十进制就是0-9,基数有10个;十六进制就是0-9、A-F,基数有16个。

权:每一位表示的数值。
比如十进制的8769里8代表8* 1000,7代表7* 100,6代表6* 10,9代表9* 1。这里的千位数代表1000,百位数代表100,十位数代表10,个位数代表1。

权=基数^x,x表示位数(从右往左数,从0开始)

还是以十进制为例子,千位数的权=基数10^3=1000

十进制数=各位数字*权的和

按权展开法: 十进制数 = ∑ i 第 i 位数字 ∗ 第 i 位数字的权 = ∑ i 第 i 位数字 ∗ 基 数 i 十进制数=∑_i第i位数字*第i位数字的权=∑_i第i位数字*基数^i 十进制数=ii位数字i位数字的权=ii位数字i

1、整数转化成十进制

(1)二进制转十进制

1010 1 2 = 1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 = 16 + 0 + 4 + 0 + 1 = 21 10101_2=1\times2^4+0\times2^3+1\times2^2+0\times2^1+1\times2^0=16+0+4+0+1=21 101012=1×24+0×23+1×22+0×21+1×20=16+0+4+0+1=21

(2)八进制转十进制

257 3 8 = 2 × 8 3 + 5 × 8 2 + 7 × 8 1 + 3 × 8 0 = 1403 2573_8=2\times8^3+5\times8^2+7\times8^1+3\times8^0=1403 25738=2×83+5×82+7×81+3×80=1403

2、小数转化成十进制

(1)二进制转十进制

1101.100 1 2 = 1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 0 × 2 − 3 + 1 × 2 − 4 = 8 + 4 + 0 + 1 + 1 / 2 + 0 + 0 + 1 / 16 = 13.5625 1101.1001_2=1\times2^3+1\times2^2+0\times2^1+1\times2^0+1\times2^{-1}+0\times2^{-2}+0\times2^{-3}+1\times2^{-4}=8+4+0+1+1/2+0+0+1/16=13.5625 1101.10012=1×23+1×22+0×21+1×20+1×21+0×22+0×23+1×24=8+4+0+1+1/2+0+0+1/16=13.5625

(2)八进制转十进制

573.1 2 8 = 5 × 8 2 + 7 × 8 1 + 3 × 8 0 + 1 × 8 − 1 + 2 × 8 − 2 = 320 + 56 + 3 + 1 / 8 + 1 / 32 = 379.15625 573.12_8=5\times8^2+7\times8^1+3\times8^0+1\times8^{-1}+2\times8^{-2}=320+56+3+1/8+1/32=379.15625 573.128=5×82+7×81+3×80+1×81+2×82=320+56+3+1/8+1/32=379.15625

3、代码

1、整数转化成十进制

写法1

def k_to_ten(k,x):
    ans=0
    for i in list(x):
        ans=ans*k+int(i)
    return ans
print(k_to_ten(8,"2573"))
# 1403
print(k_to_ten(2,"10101"))
# 21

写法2

int_to_char="0123456789ABCDEF"
char_to_int={}
for i in range(16):
    char_to_int[int_to_char[i]]=i

def k_to_ten(k,x):
    ans=0
    for i in x:
        ii=char_to_int[i]
        ans=ans*k+ii
    return ans
print(k_to_ten(8,"2573"))

写法3

int_to_char="0123456789ABCDEF"
char_to_int={}
for i in range(16):
    char_to_int[int_to_char[i]]=i

def k_to_ten(k,x):
    ans=0
    length=len(x)
    for index,char in enumerate(list(x)):
        ii=char_to_int[char]
        ans+=ii*k**(length-index-1)
    return ans
print(k_to_ten(2,"10101"))

2、小数转化成十进制

int_to_char="0123456789ABCDEF"
char_to_int={}
for i in range(16):
    char_to_int[int_to_char[i]]=i
def k_to_ten(k,x):
    # 把x分成正数和小数
    x=x.split('.')
    ans=0
    for index,char in enumerate(list(x[0])):
        length=len(x[0])
        ii=char_to_int[char]
        ans+=ii*k**(length-index-1)
    for index,char in enumerate(list(x[1])):
        ii=char_to_int[char]
        ans+=ii*k**(-(index+1))
    return ans
print(k_to_ten(8,"573.12"))
# 379.15625

二、十进制转任意进制

除k取余法:十进制数字不断除以k求余数,然后逆序输出。

之前已经知道了 十进制数 = ∑ i 第 i 位数字 ∗ 第 i 位数字的权 = ∑ i 第 i 位数字 ∗ 基 数 i 十进制数=∑_i第i位数字*第i位数字的权=∑_i第i位数字*基数^i 十进制数=ii位数字i位数字的权=ii位数字i,那么除以基数k就可以以低位到高位的顺序得到基数。

以把十进制的99转化成二进制为例子:
99/2=49……1
49/2=24……1
24/2=12……0
12/2=6……0
6/2=3……0
3/2=1……1
1/2=0……1
所以 9 9 10 = 0110001 1 2 所以99_{10}=0110 0011_2 所以9910=011000112

1、十进制整数转化成其他进制

还是以是十进制数99为例:

9 9 10 = 0110001 1 2 99_{10}=0110 0011_2 9910=011000112

99/2=49……1
49/2=24……1
24/2=12……0
12/2=6……0
6/2=3……0
3/2=1……1
1/2=0……1
99=1*2**6+1*2**5+0*2**4+0*2**3+0*2**2+1*2**1+1*2**0

9 9 10 = 14 3 8 99_{10}=143_8 9910=1438

99/8=12……3
12/8=1……4
1/8=0……1
99=1*8**2+4*8**1+3*8**0

9 9 10 = 6 3 16 99_{10}=63_{16} 9910=6316

99/16=6……3
6/16……6
99=6*16**1+6*16**0

2、十进制小数转化成其他进制

除k取整法:十进制小数转k进制,乘以k求整数,然后顺序输出。

0.62 5 10 = 0.10 1 2 0.625_{10}=0.101_2 0.62510=0.1012

在这里插入图片描述

例题

1、十进制整数转化成其他进制

input: 十进制int
output: k进制整数

int_to_char="0123456789"

def ten_to_k(k,x):
    ans=[]
    if x==0:
        ans.append(0)
        return
    while x:
        ans.append(x%k)
        x=x//k
    ans.reverse()
    print(ans)
    for i in ans:
        print(int_to_char[i],end="")
    return
ten_to_k(8,99)
# 143

input: 十进制int
output: k进制列表

int_to_char="0123456789"

def ten_to_k(k,x):
    ans=[]
    if x==0:
        ans.append(0)
        return ans
    while x:
        ans.append(x%k)
        x=x//k
    ans.reverse()
    return ans
print(ten_to_k(8,99))
# [1,4,3]

2、十进制小数转化成其他进制

int_to_char="0123456789"
def ten_to_k(k,x):
    x=str(x)
    # 把x分成正数和小数
    x=x.split('.')
    x=[int(x[0]),int(x[1])/10**len(x[1])]
    ans=[[],[]]
    if x[0]==0:
        ans[0].append(0)
    while x[0]:
        ans[0].append(x[0]%k)
        x[0]=x[0]//k
    ans[0].reverse()
    while x[1]:
        # 依次乘k
        zs=x[1]*k
        # 取整数部分
        ans[1].append(int(zs//1))
        x[1]=zs-zs//1
    all=[''.join([int_to_char[i] for i in ans[0]]),'.']+[''.join([int_to_char[i] for i in ans[1]])]
    return all
print(ten_to_k(2,0.625))
# ['0', '.', '101']

例题

lanqiao1230 进制转换
lanqiao2095 九进制转十进制
lanqiao2489 进制


http://www.kler.cn/news/310696.html

相关文章:

  • Redis技术解析(基础篇)
  • spring boot 定时器配置
  • Qt中pro项目文件配置介绍
  • 智慧园区:解析集成运维的未来之路
  • 在 Windows 上恢复已删除的 PDF 文件的最佳方法
  • 基于Spring Boot的能源管理系统+建筑能耗+建筑能耗监测系统+节能监测系统+能耗监测+建筑能耗监测
  • 健康监测功能或暂缓亮相,Apple Watch Series 10最新爆料解析
  • DeepFaceLab训练技巧
  • WordPress建站钩子函数及使用
  • 大数据新视界 --大数据大厂之 Cassandra 分布式数据库:高可用数据存储的新选择
  • 基于SpringBoot+Vue的网上书店
  • git bash中执行java命令乱码问题处理
  • Python基础(六)——PyEcharts数据可视化初级版
  • C语言 | Leetcode C语言题解之第414题第三大的数
  • java定时任务
  • QT----基于QML的计时器
  • 【算法】堆与优先级队列
  • shinyproxy部署R语言shiny APP
  • C++:字符串string转成整型int
  • 数据结构一:绪论
  • linux-系统管理与监控-日志管理
  • 本地不能訪問linux的kafka服務
  • 研1日记14
  • 【数据结构】排序算法---冒泡排序
  • 【JVM GC核心参数】JVM原理,JAVA 各种垃圾回收器的核心参数,JAVA GC回收器参数配置,核心参数说明
  • 二百六十四、Java——Java采集Kafka主题A的JSON数据,解析成一条条数据,然后写入Kafka主题B中
  • 数组学习内容
  • Agent:原理与快速构建 | 人工智能 | Langchain | Python ——学习笔记
  • 使用 Fairseq 进行音频预训练:配置与实现
  • 设计模式之命令模式:从原理到实战,深入解析及源码应用