二进制、八进制、十进制和十六进制间的转换(原理及工程实现)

        在计算机科学和编程中,进制转换是一个非常重要的基础知识。无论是二进制、八进制、十进制还是十六进制,它们在不同的场景中都有广泛的应用。本文将详细介绍常用进制之间的转换方法,并附上C语言示例代码,帮助大家更好地理解和掌握这一知识点。


1. 什么是进制?

        进制(Number System)是一种表示数字的方法,常见的进制包括:

  • 二进制(Binary):基数为 2,使用数字 0 和 1。

  • 八进制(Octal):基数为 8,使用数字 0 到 7。

  • 十进制(Decimal):基数为 10,使用数字 0 到 9。

  • 十六进制(Hexadecimal):基数为 16,使用数字 0 到 9 和字母 A 到 F。


2. 进制转换方法

2.1 二进制、八进制、十六进制转十进制

        将其他进制转换为十进制的方法是通过按权展开法。公式如下:

a=d_n \times r^n+d_{n-1} \times r^{n-1}+\cdots+d_0 \times r^0

其中:

  • d 是每一位的数字;

  • r 是基数(二进制为 2,八进制为 8,十六进制为 16);

  • nn是位数。

示例 1:二进制转十进制

        将二进制数 1011 转换为十进制:

     1 \times 2^3+0 \times 2^2+1 \times 2^1+1 \times 2^0=8+0+2+1=11

示例 2:十六进制转十进制

        将十六进制数 1A3 转换为十进制:

1 \times 16^2+10 \times 16^1+3 \times 16^0=256+160+3=419


2.2 十进制转二进制、八进制、十六进制

        将十进制转换为其他进制的方法是除基取余法,即不断除以目标进制基数,记录余数,直到商为 0,最后将余数倒序排列。

 示例 3:十进制转二进制

        将十进制数 25 转换为二进制:

25÷2=12 余1

12÷2=12 余0

6÷2=12 余0

3÷2=12 余1

1÷2=12 余1

        将余数倒序排列:11001,所以 25 的二进制表示为 11001

示例 4:十进制转十六进制

        将十进制数 300 转换为十六进制:

300÷16=18   余12(C)

18÷16=1  余2

1÷16=0   余1

        将余数倒序排列:12C,所以 300 的十六进制表示为 12C


2.3 二进制与八进制、十六进制的互相转换

        由于 8=2^316=2^4,二进制与八进制、十六进制之间的转换可以通过分组法快速完成。

示例 5:二进制转八进制

        将二进制数 101110 转换为八进制:

  1. 从右向左每 3 位分组:101 110

  2. 将每组转换为十进制:

    101 = 1 \times 2^2+0 \times 2^1+1 \times 2^0=5
    110 = 1 \times 2^2+1 \times 2^1+0 \times 2^0=6
  3. 组合结果:56

示例 6:十六进制转二进制

将十六进制数 3F 转换为二进制:

  1. 将每位十六进制数转换为 4 位二进制:

    • 3 = 0011

    • F = 1111

  2. 组合结果:00111111


3. 编程实现进制转换(C语言)

以下是使用C语言实现进制转换的示例代码:

3.1 十进制转二进制、八进制、十六进制

#include <stdio.h>void decimalToBinary(int num) {if (num > 1) {decimalToBinary(num / 2);}printf("%d", num % 2);
}void decimalToOctal(int num) {if (num > 7) {decimalToOctal(num / 8);}printf("%d", num % 8);
}void decimalToHexadecimal(int num) {if (num > 15) {decimalToHexadecimal(num / 16);}int remainder = num % 16;if (remainder < 10) {printf("%d", remainder);} else {printf("%c", 'A' + (remainder - 10));}
}int main() {int num = 255;printf("十进制数 %d 的二进制表示为: ", num);decimalToBinary(num);printf("\n");printf("十进制数 %d 的八进制表示为: ", num);decimalToOctal(num);printf("\n");printf("十进制数 %d 的十六进制表示为: ", num);decimalToHexadecimal(num);printf("\n");return 0;
}

3.2 其他进制转十进制

#include <stdio.h>
#include <string.h>
#include <math.h>int binaryToDecimal(char *binary) {int decimal = 0, length = strlen(binary);for (int i = 0; i < length; i++) {if (binary[i] == '1') {decimal += pow(2, length - i - 1);}}return decimal;
}int octalToDecimal(char *octal) {int decimal = 0, length = strlen(octal);for (int i = 0; i < length; i++) {decimal += (octal[i] - '0') * pow(8, length - i - 1);}return decimal;
}int hexadecimalToDecimal(char *hex) {int decimal = 0, length = strlen(hex);for (int i = 0; i < length; i++) {if (hex[i] >= '0' && hex[i] <= '9') {decimal += (hex[i] - '0') * pow(16, length - i - 1);} else if (hex[i] >= 'A' && hex[i] <= 'F') {decimal += (hex[i] - 'A' + 10) * pow(16, length - i - 1);}}return decimal;
}int main() {char binary[] = "1010";char octal[] = "12";char hex[] = "1A";printf("二进制数 %s 的十进制表示为: %d\n", binary, binaryToDecimal(binary));printf("八进制数 %s 的十进制表示为: %d\n", octal, octalToDecimal(octal));printf("十六进制数 %s 的十进制表示为: %d\n", hex, hexadecimalToDecimal(hex));return 0;
}


4. 总结

进制转换是计算机科学中的基础技能,掌握它对于理解计算机底层原理和编程非常重要。本文介绍了常用的进制转换方法,并通过C语言示例代码帮助大家更好地理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始的 Kafka 学习(二)| 集群启动

1. 相关概念 1.1 代理&#xff1a;Broker 使用Kafka前&#xff0c;我们都会启动Kafka服务进程&#xff0c;这里的Kafka服务进程我们一般会称之为Kafka Broker 或 Kafka Server。因为Kafka是分布式消息系统所以再实际的生产环境中&#xff0c;是需要多个服务进程形成集群提供消…

python如何随机产生一堆数字并输出

python随机产生一堆数字并输出的方法&#xff1a; 通过for循环语句多次执行for循环里面的“random.randint()”函数产生随机数。将产生的随机数赋值给变量&#xff0c;输出这个变量就可以了 执行结果如下&#xff1a;

vue3与react、 react hooks

一、Vue3新特性&#xff1a;setup、ref、reactive、computed、watch、watchEffect函数、生命周期钩子、自定义hooks函数、toRef和toRefs、shallowReactive 与 shallowRef、readonly 与 shallowReadonly、toRaw 与 markRaw、customRef、provide 与 inject、Fragment、Teleport、…

《基于WebGPU的下一代科学可视化——告别WebGL性能桎梏》

引言&#xff1a;科学可视化的算力革命 当WebGL在2011年首次亮相时&#xff0c;它开启了浏览器端3D渲染的新纪元。然而面对当今十亿级粒子模拟、实时物理仿真和深度学习可视化需求&#xff0c;WebGL的架构瓶颈日益凸显。WebGPU作为下一代Web图形标准&#xff0c;通过显存直存、…

宠物医疗对接DeepSeek详细方案

基于DeepSeek本地化部署技术与医疗场景优化实践 一、核心架构设计 1. 本地化部署与数据安全 私有化服务器部署:将DeepSeek模型部署在宠物医院本地服务器,所有诊疗数据(如宠物病历、影像报告)均存储于院内,避免云端传输风险数据加密机制:采用AES-256加密算法对医疗数据加…

K8s 1.27.1 实战系列(一)准备工作

一、主机规划与硬件要求 1、节点数量 至少需要 3 台服务器(1 台 Master 节点,2 台 Worker 节点)。本地测试可缩容:若仅用于测试,可缩减为 1 个 Master 和 1 个 Worker,但需注意稳定性风险。2、硬件配置 ​Master 节点:建议 2 核 CPU、8GB 内存、80GB 硬盘。​Worker 节…

2.PSCAD是什么软件?

PSCAD&#xff08;Power Systems Computer Aided Design&#xff09;是一款功能强大的电力系统仿真软件&#xff0c;广泛应用于电力系统的建模、仿真和分析。它结合了电磁暂态仿真引擎EMTDC&#xff08;Electromagnetic Transients including DC&#xff09;&#xff0c;能够精…

Stable Diffusion模型Pony系列模型深度解析

Stable Diffusion模型Pony系列模型深度解析 一、技术架构与核心特性 基于SDXL的深度优化 Pony系列模型以SDXL为基础框架&#xff0c;通过针对二次元/动漫风格的微调&#xff0c;强化了在该领域的生成能力&#xff0c;同时保留了对写实场景的兼容性‌。其训练数据特别侧重于人…

FastGPT 引申:混合检索完整实例

文章目录 FastGPT 引申&#xff1a;混合检索完整实例1. 各检索方式的初始结果2. RRF合并过程3. 合并后的结果4. Rerank重排序后5. 最终RRF合并6. 内容总结 FastGPT 引申&#xff1a;混合检索完整实例 下边通过一个简单的例子说明不同检索方式的分值变化过程&#xff0c;假设我…

在MATLAB环境中,对矩阵拼接(Matrix Concatenation)的测试

在MATLAB环境中&#xff0c;对矩阵拼接&#xff08;Matrix Concatenation&#xff09;的正确性与鲁棒性开展测试时&#xff0c;需要依据不同的拼接场景精心设计测试用例&#xff0c;全面验证矩阵维度、数据顺序、边界条件以及异常处理等关键方面。以下是详尽的测试方法与具体示…

OpenFeign 学习笔记

OpenFeign 学习笔记 一、基础入门 1.1 简介 OpenFeign 是基于声明式的 REST 客户端&#xff0c;用于简化服务间远程调用。&#xff08;编程式 REST 客户端&#xff08;RestTemplate&#xff09;&#xff09; 通过接口注解方式定义 HTTP 请求&#xff0c;自动实现服务调用。 …

“沂路畅通”便利服务平台:赋能同城物流,构建高效畅通的货运生态

“沂路畅通”便利服务平台&#xff1a;赋能同城物流&#xff0c;构建高效畅通的货运生态 随着城市化进程的加速&#xff0c;同城物流需求迅速增长&#xff0c;然而货运过程中仍然存在信息不对称、资源浪费、司机服务体验差等痛点。临沂呆马区块链网络科技有限公司&#xff08;…

去除HTML有序列表(ol)编号的多种解决方案

以下是去除HTML有序列表(ol)编号的多种解决方案&#xff1a; <!DOCTYPE html> <html> <head> <style> /* 基础方案&#xff1a;完全移除编号 */ ol.no-number {list-style-type: none; /* 移除默认编号 */padding-left: 0; /* 移除默认缩进 */…

es如何进行refresh?

在 Elasticsearch 中,refresh 操作的作用是让最近写入的数据可以被搜索到。以下为你介绍几种常见的执行 refresh 操作的方式: 1. 使用 RESTful API 手动刷新 你可以通过向 Elasticsearch 发送 HTTP 请求来手动触发 refresh 操作。可以针对单个索引、多个索引或者所有索引进…

Leetcode 57: 插入区间

Leetcode 57: 插入区间 问题描述&#xff1a; 给定一个非重叠的区间集合 intervals&#xff08;按开始时间升序排列&#xff09;和一个新的区间 newInterval&#xff0c;将新的区间插入到区间集合中并合并重叠的部分&#xff0c;最后返回结果区间集合。 适合面试的解法&#x…

爬虫面试:关于爬虫破解验证码的13个经典面试题

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. ​什么是验证码(CAPTCHA)?它的作用是什么?2. ​常见的验证码类型有哪些?3. ​在爬虫开发中,遇到验证码时通常有哪些解决方案?4. ​如何使用第三方验证码识别服务?请举例说明。5. ​训练自己的验证码识别模型…

Kylin麒麟操作系统服务部署 | NFS服务部署

以下所使用的环境为&#xff1a; 虚拟化软件&#xff1a;VMware Workstation 17 Pro 麒麟系统版本&#xff1a;Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、 NFS服务概述 NFS&#xff08;Network File System&#xff09;&#xff0c;即网络文件系统。是一种使用于…

三参数水质在线分析仪:从源头保障饮用水安全

【TH-ZS03】饮用水安全是人类健康的重要保障&#xff0c;其质量直接关系到人们的生命健康。随着工业化、城市化的快速发展&#xff0c;水体污染问题日益严峻&#xff0c;饮用水安全面临着前所未有的挑战。为了从源头保障饮用水安全&#xff0c;科学、高效的水质监测手段必不可少…

PGlite:浏览器中运行的PostgreSQL

PGlite 是一款基于 WebAssembly&#xff08;WASM&#xff09;构建的轻量级 PostgreSQL 数据库引擎&#xff0c;旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置&#xff0c;特别适合开发测试、本地化应用及快速原型设计。 一…

【Spring AOP】_使用注解编写AOP程序

目录 1. 以增加方法执行时间为例使用AOP 1.1 引入AOP依赖 1.2 编写AOP程序 2. AOP的重要概念 3. AOP通知类型与通知方法标注 3.1 在通知方法前使用对应注解 3.2 使用Pointcut注解提取公共切点表达式 3.3 跨类使用切点 3.4 切面类排序 1. 以增加方法执行时间为例使用AO…