进制转换及C语言中进制转换方法
进制转换是计算机科学和数学中的基础操作,主要用于不同数制之间的数值表示转换。以下是常见进制(二进制、八进制、十进制、十六进制)的转换方法及示例:
一、其他进制 → 十进制
方法:按权展开,逐位相加。
公式:
[ \text{十进制值} = \sum (每一位数值 \times 基数^{\text{位权}}) ]
示例:
-
二进制 → 十进制
( 1011_2 = 1×2^3 + 0×2^2 + 1×2^1 + 1×2^0 = 8 + 0 + 2 + 1 = 11_{10} ) -
十六进制 → 十进制
( 2A_{16} = 2×16^1 + 10×16^0 = 32 + 10 = 42_{10} )
二、十进制 → 其他进制
方法:除基取余法(整数部分)或乘基取整法(小数部分),倒序排列余数。
1. 整数部分转换(除基取余)
步骤:
- 用十进制数除以目标进制基数,记录余数。
- 将商继续除以基数,直到商为0。
- 余数倒序排列即为结果。
示例:
将 ( 25_{10} ) 转换为二进制:
[
\begin{align*}
25 ÷ 2 &= 12 \ \text{余} \ 1 \
12 ÷ 2 &= 6 \ \ \ \text{余} \ 0 \
6 ÷ 2 &= 3 \ \ \ \text{余} \ 0 \
3 ÷ 2 &= 1 \ \ \ \text{余} \ 1 \
1 ÷ 2 &= 0 \ \ \ \text{余} \ 1 \
\end{align*}
]
倒序排列余数:( 11001_2 )
2. 小数部分转换(乘基取整)
步骤:
- 用小数部分乘以目标进制基数,记录整数部分。
- 取结果的小数部分继续乘以基数,直到小数部分为0或达到精度要求。
- 整数部分正序排列即为结果。
示例:
将 ( 0.625_{10} ) 转换为二进制:
[
\begin{align*}
0.625 × 2 &= 1.25 \quad \text{取整} \ 1 \
0.25 × 2 &= 0.5 \quad \ \ \text{取整} \ 0 \
0.5 × 2 &= 1.0 \quad \ \ \text{取整} \ 1 \
\end{align*}
]
正序排列整数部分:( 0.101_2 )
三、非十进制之间的直接转换
1. 二进制 ↔ 八进制/十六进制
-
二进制 → 八进制:每 3位 二进制为一组,转换为1位八进制(不足补零)。
示例:
( 101\ 110_2 ) → ( 5_8 \ 6_8 = 56_8 ) -
二进制 → 十六进制:每 4位 二进制为一组,转换为1位十六进制(不足补零)。
示例:
( 1101\ 0110_2 ) → ( D_{16} \ 6_{16} = D6_{16} ) -
反向转换:将八进制/十六进制每一位展开为3/4位二进制。
示例:
( 3F_{16} = 0011\ 1111_2 )
2. 八进制 ↔ 十六进制
需以二进制或十进制为中间桥梁。
示例:
( 75_8 → 111\ 101_2 → 0011\ 1101_2 → 3D_{16} )
四、进制表示符号
- 二进制:前缀
0b(如0b1010) - 八进制:前缀
0(如017) - 十六进制:前缀
0x(如0x1A)
五、快速对照表
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
掌握这些方法后,可灵活实现任意进制间的转换!
在C语言中实现进制转换可以通过多种方法,涵盖标准库函数、手动算法及位运算等。以下是常见方法及示例:
1. 使用库函数快速转换
1.1 sprintf 和 sscanf
- 十进制转其他进制:
int num = 255; char hex[10], oct[10]; sprintf(hex, "%X", num); // 十进制→十六进制,输出FF sprintf(oct, "%o", num); // 十进制→八进制,输出377 - 其他进制转十进制:
支持十六进制(sscanf("FF", "%x", &num); // 十六进制→十进制,num=255 sscanf("377", "%o", &num); // 八进制→十进制,num=255%x)、八进制(%o)和十进制(%d)的格式化输入输出。
1.2 strtol 函数
可将任意进制字符串转换为十进制:
char hex[] = "1A";
long decimal = strtol(hex, NULL, 16); // 十六进制→十进制,结果为26
参数16可替换为其他基数(如2、8)。
2. 手动实现转换算法
2.1 十进制转其他进制(除基取余法)
示例:十进制转二进制
void decimalToBinary(int n) {int binary[32], i = 0;while (n > 0) {binary[i++] = n % 2;n /= 2;}for (int j = i-1; j >= 0; j--) printf("%d", binary[j]); // 输出余数倒序
}
类似方法可扩展至八进制、十六进制(需处理余数≥10时用字母表示)。
2.2 其他进制转十进制(按权展开法)
示例:二进制转十进制
int binaryToDecimal(char *binaryStr) {int decimal = 0, len = strlen(binaryStr);for (int i = 0; i < len; i++) {if (binaryStr[len-i-1] == '1')decimal += (1 << i); // 位权累加}return decimal;
}
此方法支持任意进制,需根据基数调整计算逻辑。
3. 位运算优化
适用于二进制与其他进制的快速转换:
void decimalToBinary(int num) {for (int i = 31; i >= 0; i--) printf("%d", (num >> i) & 1); // 逐位提取二进制位
}
此方法直接操作内存中的二进制位,效率较高。
4. 处理不同进制的输入输出
- 直接表示:
int oct = 077; // 八进制(前缀0) int hex = 0xFF; // 十六进制(前缀0x) - 格式化输出:
printf("%o %x", oct, hex); // 输出八进制和十六进制
总结
- 简单场景:优先使用库函数(如
sprintf、strtol)。 - 自定义需求:手动实现算法(如递归、位运算)。
- 性能优化:结合位运算或预计算表提升效率。
相关文章:
进制转换及C语言中进制转换方法
进制转换是计算机科学和数学中的基础操作,主要用于不同数制之间的数值表示转换。以下是常见进制(二进制、八进制、十进制、十六进制)的转换方法及示例: 一、其他进制 → 十进制 方法:按权展开,逐位相加。 …...
【我要成为配环境高手】node卸载与nvm安装
node卸载与nvm安装 1. node卸载 参考了这篇文章: https://blog.csdn.net/weixin_43801036/article/details/141487791 2. nvm安装 参考了这两篇文章: https://www.cnblogs.com/rnny/p/17839190.html#tid-z7A3nR https://blog.csdn.net/weixin_45811…...
环境变量与本地变量
目录 本地变量的创建 环境变量VS本地变量 认识完了环境变量我们来认识一下本地变量。 本地变量的创建 我们如果直接env是看不到本地变量的,因为本地变量和环境变量都具有独立性,环境变量是系统提供的具有全局属性的变量,都存在bash进程的…...
Docker安装Kafka(不依赖ZooKeeper)
创建docker-compose.yaml version: "3.9" #版本号 services:kafka:image: apache/kafka:3.9.0container_name: kafkahostname: kafkaports:- 9092:9092 # 容器内部之间使用的监听端口- 9094:9094 # 容器外部访问监听端口environment:KAFKA_NODE_ID: 1KAFKA_PROCES…...
Visual Studio中打开多个项目
1) 找到解决方案窗口 2) 右键添加→ 选择现有项目 3) 选择.vcxproj文件打开即可...
rust笔记7-生命周期显式标注
Rust 的生命周期(Lifetimes)是 Rust 内存安全模型的核心部分,用于确保引用始终有效,避免悬垂引用(Dangling References)。下面我们从生命周期的设计出发点、标注语法以及在不同上下文中的应用(函数、方法、结构体、trait 等)来详细介绍。 1. 生命周期设计的出发点 Rus…...
广西壮族自治区园区投促中心党委书记陶德文率团到访深兰科技
2月16日,广西壮族自治区园区投促中心党委书记、主任,自治区园区办党组成员陶德文率团来到深兰科技集团上海总部考察调研,并与深兰科技集团创始人、董事长陈海波等集团管理层座谈交流,双方围绕深兰科技人工智能项目落地广西的相关事…...
1005 K 次取反后最大化的数组和(贪心)
文章目录 题目[](https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/)算法原理源码总结 题目 如上图,k是取反的次数,在数组【4,-1,3】中,当k 1,把-2取反为2,和为9;在数组…...
Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网
| 线上研讨会时间:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括:是否只需集成单一的工…...
SpringBoot整合Redis和Redision锁
参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…...
【Pandas】pandas Series rename_axis
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...
数仓搭建(hive):DM搭建(数据集市层)
DM层 数据集市层 (Data Mart) 粒度上卷(Roll-up): 指的是沿着维度层次向上聚合汇总数据,从细粒度到粗粒度观察数据的操作。 示例 数仓的上一层DWS的是按日汇总 DM层基于DWS层主题日宽表上卷统计出按年,月,周的数…...
用LightRAG+智谱GLM-4提升政务对话精度:从知识图谱到精准问答的实战指南
在政务场景中,对话系统的精度至关重要,一个不准确的回答可能导致政策误解甚至行政失误。LightRAG结合智谱GLM-4,通过知识增强(如知识图谱、检索增强生成RAG和动态上下文)显著提升问答准确性。本文从代码实现到架构优化…...
用 Python 实现 DeepSeek R1 本地化部署
DeepSeek R1 以其出色的表现脱颖而出,不少朋友想将其本地化部署,网上基于 ollama 的部署方式有很多,但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署,让你轻松掌握,打造属于自己的 AI…...
动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应
动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应 在操作系统中,动态内存分配算法用于管理空闲内存块的分配和回收。最先适应算法(First Fit)、最优适应算法(Best Fit)和最坏适应算法&#x…...
GitHub基本操作及Git简单命令
GitHub简介 GitHub就是一个远程仓库,远程仓库可以理解为就是一个可以保存自己代码的地方,在实际开发当中一个项目往往是有多个人来共同协作开发完成的,那么就需要一个统一代码保存的地方,而GitHub就是起到一个共享和汇总代码的作…...
AI工作流+专业知识库+系统API的全流程任务自动化
我有点悲观,甚至很沮丧,因为AI留给普通人的机会不多了,这既是人类之间权力的斗争,也是硅基生命和碳基生命的斗争。AI自动化是无法避免的趋势,如果人类不能平权,那就只能跪下接受审判。 通过整合AI工作流、专…...
C++深拷贝\浅拷贝
C 中的深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是指在对象复制时,对象成员的复制方式不同。理解这两种拷贝构造方式非常重要,尤其是在涉及到动态内存分配和资源管理时。 浅拷贝(Shallow Copy&…...
本地文件共享——HFS
目录 1.介绍: 2.下载: 3.开始使用: 1.介绍: HFS(HTTP File Server)是一款轻量级的本地文件共享软件,主要用于快速搭建一个基于网页的临时文件服务器,支持通过浏览器直接上传或下载…...
第十二届先进制造技术与材料工程国际学术会议 (AMTME 2025)
重要信息 大会官网:www.amtme.org(了解会议,投稿等) 大会时间:2025年3月21-23日 大会地点:中国-广州 简介 2025年第十二届先进制造技术与材料工程 (AMTME 2025) 定于2025年3月21-23日在中国广州隆重举…...
【Alertmanager】alertmanager告警系统原理剖析与应用实战,应有尽有非常全面
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
C语言预处理学习笔记
1. 预处理器的功能 预处理器(Preprocessor)在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头,主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容,通常用…...
jQuery AJAX 方法详解
jQuery AJAX 方法详解 引言 随着互联网技术的不断发展,前端开发领域的技术也在不断更新迭代。jQuery 作为一种广泛使用的前端JavaScript库,极大地简化了DOM操作和事件处理。在众多jQuery功能中,AJAX(Asynchronous JavaScript and XML)方法尤为突出,它允许我们在不重新加…...
C++之虚函数、虚函数表
C 虚函数、虚函数表详解与实践 C中虚函数是实现多态的重要技术,接下来将从汇编、以及gdb调试运行方面下手全面了解虚函数、虚函数表、以及虚函数调用。 原理初认识 一个由虚函数的类将会有一个虚函数表,且所有该类的实例化对象共享一个虚函数表。虚函…...
零基础学QT、C++(一)安装QT
目录 如何快速学习QT、C呢? 一、编译器、项目构建工具 1、编译器(介绍2款) 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢? 那就是项目驱动法&…...
Python SMTP 实现邮件发送功能
发送邮件的流程 登录我们邮箱, 书写接收者的邮箱, 书写题目与内容,添加附件, 点击发送。 邮件协议 smtp 是邮件发送的协议。pop3 是邮件接收的协议。 smtplib模块用法 创建协议对象:smtpObj smtplib.SMTP() 创建…...
低价窜货要如何管控
在竞争激烈的市场环境中,低价与窜货就像一对如影随形的“孪生兄弟”,给品牌的健康发展带来了极大的困扰。低价销售不仅压缩了合理的利润空间,破坏了市场的价格体系,还会引发恶性竞争,让整个市场陷入混乱无序的状态。而…...
如何看nginx.conf文件?
是的,你的理解是对的!在 Nginx 配置中,最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时,Nginx 会根据请求的路径(即 URL)匹配 location 块,然后按照匹配的顺序逐层向…...
Linux中POSIX应用场景
Linux 提供了丰富的 POSIX(Portable Operating System Interface)标准接口,这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数,涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...
《动手学机器人学》笔记
目录 0.介绍1.概述|空间位置、姿态的描述(33)|《动手学机器人学》2.(2)-Robotics Toolbox①(V10.4)3.齐次坐标与变换矩阵4.一般形式的旋转变换矩阵5.(轴角法)…...
