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

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中不同进制间的转换 一、不同进制在计算机科学、数学和其他领域中具广泛的应用。以下是一些常见的应用&#xff1a;1. 二进制&#xff08;base-2&#xff09;: 在计算机系统中&#xff0c;数据以二进制形式存储和处理。二进制由0和1组成&#xff0c;是数字电子技术的基础…...

物流监管:智慧仓储数据可视化监控平台

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

C++对象模型(19)-- 函数语义学:成员函数

1、普通成员函数的调用 1.1 调用方式的转换 为了提高普通成员函数的调用效率&#xff0c;在C中&#xff0c;对普通成员函数的调用&#xff0c;会转换成对全局函数的调用。 假如有下面所示的成员函数&#xff1a; class Test { public:int m_i;int func(int a) {m_i a;retu…...

AI只需26秒,就可以设计一款会走路的机器人

由西北大学、麻省理工学院和佛蒙特大学组成的一支科研团队首次开发出一种可以完全自行设计机器人的 AI 算法。 这一 AI 算法不仅运行速度快&#xff0c;还可在个人计算机上运行&#xff0c;并从头开始设计全新的结构。只需告诉AI“我们想要一个可穿越陆地的机器人”&#xff0c…...

简单实现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()函数为例&#xff0c;进行解释&#xff1b; 文章目录 一、函数原型和源代码二、函数用法详解&#xff1a;2.1 参数2.1.1 TIM_HandleTypeDef结构体详解 2.2 使用场景&#xff1a;2.3 使用方法&#xff1a; 三、函数使用示例&#xff…...

C语言之通讯录的实现篇优化版

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

C++17中std::string_view的使用

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

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&#xff08;可扩展标记语言&#xff09;是一种常用的数据交换格式&#xff0c;用于存储和交换数据。然而&#xff0c;为了确保数据的一致性和有效性&#xff0c;通常需要定义XML约束。XML约束是一种规则集&#xff0c;定义了XML文档的结构、元素、属性和数据类型。本篇博客…...

第一章概述

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

XCode15与iOS17/17.1 真机测试问题处理

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

使用 Rust 和 cURL 库下载程序

以下是一个使用 Rust 和 cURL 库的下载器程序&#xff0c;用于下载 图像。此程序使用了 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 …...

三维模型表面积计算方法

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

unity脚本_力 c#

创建一个脚本 将代码挂载到物体上 取消物体的重力 运行即向z轴运动 加力之后 是否停止是由阻力影响 如果阻力为零 则会一直运动 如果希望就算有阻力也让物体一直动就将加力代码放在Update函数里 using UnityEngine; public class Power : MonoBehaviour{ Rigidbody rigidBo…...

LeetCode 面试题 10.05. 稀疏数组搜索

文章目录 一、题目二、C# 题解 一、题目 稀疏数组搜索。有个排好序的字符串数组&#xff0c;其中散布着一些空字符串&#xff0c;编写一种方法&#xff0c;找出给定字符串的位置。 示例1: 输入: words [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”…...

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测

分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测 目录 分类预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于BiLSTM-…...

Sobel算子详解及例程

Sobel算子是一种经典的边缘检测算子&#xff0c;被广泛应用于图像处理领域。它基于图像亮度的变化率来检测边缘的位置&#xff0c;主要通过计算图像中像素点的梯度来实现。 Sobel算子分为水平和垂直两个方向的算子&#xff0c;记作Gx和Gy。它们分别对图像进行水平和垂直方向的…...

ScrapeKit 和 Swift 编写程序

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

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...