Python中不同进制间的转换
Python中不同进制间的转换
一、不同进制在计算机科学、数学和其他领域中具广泛的应用。以下是一些常见的应用:
1. 二进制(base-2): 在计算机系统中,数据以二进制形式存储和处理。二进制由0和1组成,是数字电子技术的基础。
2. 十进制(base-10): 十进制是我们平常使用的数字系统,它由0到9这些数字组成。十进制在日常生活中用于计算和表示数量。
3. 八进制(base-8) 八进制使用0到7这几个数字表示数值。它在计算机编程中经常用于表达特殊位模式、字节权限和文件权限等。
4.十六进制(base-16): 十六进制使用0到9的数字和A到F的六个字母表示数值。它在计算机科学中被广泛用于表达内存地址、颜色代码和二进制数据的可读形式。
进制转换: 在计算机科学中,需要进行不同进制之间的转换。例如,将十进制数转换为二进制或十六进制,或者将二进制数转换为十进制。
除了上述应用外,进制还在信息理论、密码学、逻辑电路设计和图形处理等领域中发挥着重要作用。进制概念的灵活运用可以增强数据表示和处理的效率,以及解决特定问题所需的编程技巧。
二、在Python中,可以使用以下函数进行不同进制之间的转换:
1.bin(): 将整数转换为二进制字符串。
print(bin(10)) # 输出: '0b1010'
2.oct(): 将整数转换为八进制字符串。
print(oct(10)) # 输出: '0o12'
3.hex(): 将整数转换为十六进制字符串。
print(hex(10)) # 输出: '0xa'
4.int(): 将字符串按指定进制转换为整数。
print(int(1010,2)) # 输出: 10
print(int(1010,8)) # 输出: 10
print(int('a',16)) # 输出: 10
这些函数可用于在不同进制之间转换数字。bin()、oct()和 hex()函数将整数转换为相应进制的字符串,而 int()函数将指定进制字符串转换为整数。
三、在Python直接使用函数进行进制转换非常方便快捷。但对于初学者来说,还是要认真学习进制转换的底层运算原理。
将十进制数转换为任意进制(base)的原理是取余操作。
首先,我们从给定的十进制数开始。然后,通过连续地进行“整除并记录余数”的操作,获得在指定进制下各个位上的数字或字符。这个过程持续到十进制数变为0为止。
具体操作步骤如下:
1. 将给定的十进制数除以指定的进制(base),并记录所得的商和余数。
2. 将余数对应的数字(如果是大于9的数字,则对应于字母)作为 base 进制数的最低位值。
3. 将商继续除以指定进制,并将该步骤中得到的余数添加到首位。重复此步骤直到商变为零。
4. 得到的结果就是将十进制数转换为 base 进制的表达形式。
例如,将十进制数 10 转换为二进制(base=2),我们可以执行以下步骤:
10 ÷ 2 = 5 余 0 0
5 ÷ 2 = 2 余 1 10
2 ÷ 2 = 1 余 0 010
1 ÷ 2 = 0 余 1 1010
从最后一步开始,我们依次读取每个余数,结果就是二进制数 1010。因此,10二进制表示为 1010。
同样的原理适于将十进制数转换为任意指定的 base 进制。根据不同的进制,可使用不同的数字或字符表示位值。这种整除和取余的方法使我们能够在将任意十进制数转换为各种进制时进行有效的计算和转换。
以下是使用循环手动实现进制转换的示例代码:
# 将10进制数decimal转换为base进制的函数
def decimal_to_base(decimal, base):if not isinstance(decimal, int) or not isinstance(base, int) or base < 2:raise ValueError("Invalid inputs") # 检查输入是否有效,如果无效则引发异常digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 存储各个位上的数字或字母if decimal == 0:return '0' # 如果十进制数为0,则直接返回字符串'0'result = ''negative = Falseif decimal < 0:negative = Truedecimal = abs(decimal) # 处理负数情况,转换为正数进行计算while decimal > 0:remainder = decimal % base # 取余数result = digits[remainder] + result # 将余数对应的字符拼接到结果字符串的左侧(考虑进制转换后顺序倒过来)decimal = decimal // base # 整除以进行下一位的计算if negative:result = '-' + result # 如果原始数是负数,则在结果字符串前添加负号return result # 返回转换后的结果字符串# 调用函数进行测试
print(decimal_to_base(10597059, 16)) #输出结果:A1B2C3
print(decimal_to_base(10597059, 8) #输出结果:50331303
print(decimal_to_base(10597059, 2)) #输出结果:101000011011001011000011
以上函数可以将一个十进制数转换为任意指定进制的字符串表示形式。只需传递要转换的十进制数和目标进制作为参数即可。
将任意进制(base)数转换为十进制的原理是加权求和。
从给定的 base 进制数的最低位开始,将每个位的值乘以对应的权重,并对所有位的结果进行累加。权重由 base 的幂决定,从右到左逐渐递增。
具体的步骤如下:
1. 从给定的 base 进制数的最低位开始,将每个位的值与重相乘。
2. 对所有位的乘积求和,得到最终的十进制表示。
例如,将二进制数 1010 转换为十进制,可以执行以下步骤:
(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
= 8 + 0 + 2 + 0
= 10
因此,二进制数 1010 在十进制表示为 10。
同样的原理适用于将任意指定的 base 进制数转换为十进制。根据每个位上的值和对应的权重,可以通过加权求和的方法有效地计算和转换为十进制。这种加权求和的方法使我们能够在将各种进制转换为十进制时进行有效的计算和转换。
以下是使用循环手动实现将任意进制转换为10进制的代码:
# 将base进制数number转换为10进制的函数
def base_to_decimal(number, base):if not isinstance(number, str) or not isinstance(base, int) or base < 2:raise ValueError("Invalid inputs") # 检查输入是否有效,如果无效则引发异常digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 存各个位上的数字或字母number = number.upper() # 将输入的字符串转换为大写,以便与 digits 字符串中的字符进行匹配decimal = 0 # 初始化十进制数为0power = 0 # 初始化权重(指数)为0for digit in reversed(number): # 对于从右到左的每个数字字符if digit not in digits or digits.index(digit) >= base:raise ValueError("Invalid input") # 如果字符不在 digits 中或其索引超过等于指定 base 的范围,则引发异常decimal += digits.index(digit) * (base ** power) # 将该位上的值乘以权重,并将其累加到当前的十进制数中power += 1 # 增加权重(指数)return decimal # 返回转换后的十进制数
# 调用函数进行测试
print(base_to_decimal("A1B2C3", 16)) #输出结果:10597059
print(base_to_decimal("50331303", 8)) #输出结果:10597059
print(base_to_decimal("101000011011001011000011", 2)) #输出结果:10597059
以上函数可以将任意进制的数字字符串转换为十进制。只需传递要转换的数字和当前进制作为参数即可。
相关文章:
Python中不同进制间的转换
Python中不同进制间的转换 一、不同进制在计算机科学、数学和其他领域中具广泛的应用。以下是一些常见的应用:1. 二进制(base-2): 在计算机系统中,数据以二进制形式存储和处理。二进制由0和1组成,是数字电子技术的基础…...

物流监管:智慧仓储数据可视化监控平台
随着市场竞争加剧和市场需求的不断提高,企业亟需更加高效、智能且可靠的仓储物流管理方式,以提升企业的物流效率,减少其输出成本,有效应对市场上的变化和挑战。 图扑自研 HT for Web 产品搭建的 2D 智慧仓储可视化平台,…...

C++对象模型(19)-- 函数语义学:成员函数
1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率,在C中,对普通成员函数的调用,会转换成对全局函数的调用。 假如有下面所示的成员函数: class Test { public:int m_i;int func(int a) {m_i a;retu…...

AI只需26秒,就可以设计一款会走路的机器人
由西北大学、麻省理工学院和佛蒙特大学组成的一支科研团队首次开发出一种可以完全自行设计机器人的 AI 算法。 这一 AI 算法不仅运行速度快,还可在个人计算机上运行,并从头开始设计全新的结构。只需告诉AI“我们想要一个可穿越陆地的机器人”,…...
简单实现spring的set依赖注入
Maven依赖: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0…...
STM32 HAL库函数——HAL_TIM_Base_Start_IT()详解
以STM32G030C8T6中的HAL_TIM_Base_Start_IT()函数为例,进行解释; 文章目录 一、函数原型和源代码二、函数用法详解:2.1 参数2.1.1 TIM_HandleTypeDef结构体详解 2.2 使用场景:2.3 使用方法: 三、函数使用示例ÿ…...

C语言之通讯录的实现篇优化版
目录 动态内存管理 通讯录声明 静态版本 动态版本 初始化通讯录 静态版本 动态版本 Add增加通讯录 静态版本 动态版本 Checkcapacity增容 DestroyContact释放动态空间 文件操作 SaveContact保存信息到文件中 初始化通讯录 旧版本 文件版本 LoadContact加载…...

C++17中std::string_view的使用
为了解决std::string初始化(或拷贝)成本高昂的问题,C17引入了std::string_view。std::string_view提供对现有字符串(C风格字符串、std::string、或另一个std::string_view)的只读访问,而无需进行拷贝。当想要有效地处理和操作字符串而不修改它们时&#…...

C#,数值计算——分类与推理Phylo_nj的计算方法与源程序
1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylo_nj : Phylagglom { public double[] u; public override void premin(double[,] d, int[] nextp) { i…...

element-ui 图片压缩上传
picture.js export const compressImgNew (file) > {return new Promise(resolve > {const reader new FileReader()const image new Image()image.onload (imageEvent) > {const canvas document.createElement(canvas) // 创建画布const context canvas.getCo…...

【Java 进阶篇】Java XML约束:确保数据一致性和有效性
XML(可扩展标记语言)是一种常用的数据交换格式,用于存储和交换数据。然而,为了确保数据的一致性和有效性,通常需要定义XML约束。XML约束是一种规则集,定义了XML文档的结构、元素、属性和数据类型。本篇博客…...

第一章概述
一、学习目的与要求 本章对软件测试作了概括性的介绍,目的是使学生对软件测试有个初步的认识。通过本章的学习,应使学生掌握软件测试的基本概念,了解软件测试的发展历程和行业现状,掌握软件测试技术的分类,理解软件测试…...

XCode15与iOS17/17.1 真机测试问题处理
XCode15与iOS17/17.1 真机测试问题处理,网上相关博客很多,摘录了如下实践后能起作用的地址如下:Xcode 15 报错处理 - 简书iOS17版本适配-CSDN博客 Xcode15适配-六虎 主要介绍下:Assertion failure in void _UIGraphicsBeginImag…...

使用 Rust 和 cURL 库下载程序
以下是一个使用 Rust 和 cURL 库的下载器程序,用于下载 图像。此程序使用了 https://www.duoip.cn/get_proxy 的代码。 extern crate curl; use std::io::{self, Read}; use std::error::Error; fn main() {let url "https://www.baidu.com";let …...

三维模型表面积计算方法
【版权声明】 本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。 更多算法总结请关注我的博客:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。 本文章来自于专栏《Python三维模型处理基础》的系列文…...

unity脚本_力 c#
创建一个脚本 将代码挂载到物体上 取消物体的重力 运行即向z轴运动 加力之后 是否停止是由阻力影响 如果阻力为零 则会一直运动 如果希望就算有阻力也让物体一直动就将加力代码放在Update函数里 using UnityEngine; public class Power : MonoBehaviour{ Rigidbody rigidBo…...
LeetCode 面试题 10.05. 稀疏数组搜索
文章目录 一、题目二、C# 题解 一、题目 稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。 示例1: 输入: words [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”…...

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测
分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测 目录 分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于BiLSTM-…...
Sobel算子详解及例程
Sobel算子是一种经典的边缘检测算子,被广泛应用于图像处理领域。它基于图像亮度的变化率来检测边缘的位置,主要通过计算图像中像素点的梯度来实现。 Sobel算子分为水平和垂直两个方向的算子,记作Gx和Gy。它们分别对图像进行水平和垂直方向的…...

ScrapeKit 和 Swift 编写程序
以下是一个使用 ScrapeKit 和 Swift 编写的爬虫程序,用于爬取 图片。同时,我们使用了proxy 这段代码来获取代理。 import ScrapeKit class PeopleImageCrawler: NSObject, ScrapeKit.Crawler {let url: URLlet proxyUrl: URL init(url: URL, proxy…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...