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…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
