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

【ShuQiHere】 进制转换的世界:从十进制到二进制、十六进制的转换技巧

【ShuQiHere】

在计算机科学中,进制转换(Radix Conversion) 是一个基础且非常重要的技能。无论是理解计算机的存储、数据表示,还是在编程中处理不同的进制数据,进制转换都是不可或缺的。本文将详细讲解 十进制(Decimal, 10进制)二进制(Binary, 2进制)十六进制(Hexadecimal, 16进制) 之间的转换,帮助你扎实掌握这些技巧,并通过丰富的例子加深理解。🧠

什么是进制?🧮

进制是表示数字的方式。每种进制都有其基数(Base),表示该进制每一位数字可以取的值的范围。常见的进制有:

  • 十进制(Decimal, base-10):我们日常使用的数字系统,基数为10,使用的符号是0-9。
  • 二进制(Binary, base-2):计算机底层使用的数字系统,基数为2,符号是0和1。🖥️
  • 十六进制(Hexadecimal, base-16):常用于计算机系统,基数为16,符号是0-9和A-F,其中A表示10,B表示11,依此类推,直到F表示15。💡

进制的实际应用

  • 二进制(Binary, 2进制) 是计算机中最底层的数据表示方式,计算机存储和处理的数据都是以二进制形式存储的。
  • 十六进制(Hexadecimal, 16进制) 通常用于简化二进制表示。一个十六进制数字可以表示四位二进制数字(4 bits),因此它在表示内存地址和机器码时非常方便。

现在让我们通过更详细的例子来深入理解不同进制之间的转换!🚀


1. 十进制转二进制(Decimal to Binary, 10-2) ⚙️

十进制转二进制通常使用 除2取余法。这个方法的核心是不断将十进制数除以2,记录每次除法的余数,直到商为0。最后,将余数逆序排列得到二进制数。

步骤:

  1. 将十进制数不断除以 2,并记录每次的余数。
  2. 将余数从最后一次除法结果开始反向排列,得到最终的二进制结果。

示例:

59 转换为二进制:

  1. 59 ÷ 2 = 29,余数 1
  2. 29 ÷ 2 = 14,余数 1
  3. 14 ÷ 2 = 7,余数 0
  4. 7 ÷ 2 = 3,余数 1
  5. 3 ÷ 2 = 1,余数 1
  6. 1 ÷ 2 = 0,余数 1

将余数逆序排列得到:
59_{10} = 111011_2

背景知识:

在计算机存储中,二进制 是最基础的表示方式。每个二进制位(bit)表示一个最小存储单元,且每一位只有两种可能的状态:0 或 1。

Java代码手动实现:

public class DecimalToBinaryManual {public static String decimalToBinary(int n) {StringBuilder binaryNum = new StringBuilder();while (n > 0) {binaryNum.append(n % 2);n = n / 2;}return binaryNum.reverse().toString();}public static void main(String[] args) {System.out.println(decimalToBinary(59));  // 输出: 111011}
}

2. 十进制转十六进制(Decimal to Hexadecimal, 10-16) 🔢

将十进制数转换为十六进制可以使用 除16取余法。通过不断将十进制数除以16并记录余数,最后将余数逆序排列即可得到十六进制数。

步骤:

  1. 将十进制数不断除以 16,并记录每次的余数。
  2. 余数部分对应十六进制的符号:0-9 对应本身,10-15 对应 A-F
  3. 将余数逆序排列,得到最终的十六进制数。

示例:

1234 转换为十六进制:

  1. 1234 ÷ 16 = 77,余数 2
  2. 77 ÷ 16 = 4,余数 13 (对应十六进制的 D
  3. 4 ÷ 16 = 0,余数 4

将余数逆序排列,得到:
1234_{10} = 4D2_{16}

背景知识:

十六进制 通常用来简化二进制表示,因为一个十六进制数字正好可以表示四个二进制位。计算机中很多底层信息,如内存地址、颜色代码等,都是通过十六进制来表示的。

Java代码手动实现:

public class DecimalToHexadecimalManual {public static String decimalToHexadecimal(int n) {StringBuilder hexNum = new StringBuilder();char[] hexDigits = "0123456789ABCDEF".toCharArray();while (n > 0) {hexNum.append(hexDigits[n % 16]);n = n / 16;}return hexNum.reverse().toString();}public static void main(String[] args) {System.out.println(decimalToHexadecimal(1234));  // 输出: 4D2}
}

3. 十六进制转十进制(Hexadecimal to Decimal, 16-10) 🖥️

要将 十六进制 转换为 十进制,我们使用 权值展开法。将每一位十六进制数乘以16的相应幂次,再将结果相加得到十进制数。

步骤:

  1. 从右向左,每一位乘以 (16) 的相应幂次。
  2. 将结果相加,得到十进制数。

示例:

1A3F_{16} 转换为十进制:

[
1 A 3 F 16 = ( 1 × 1 6 3 ) + ( 10 × 1 6 2 ) + ( 3 × 1 6 1 ) + ( 15 × 1 6 0 ) = 4096 + 2560 + 48 + 15 = 671 9 10 1A3F_{16} = (1 \times 16^3) + (10 \times 16^2) + (3 \times 16^1) + (15 \times 16^0) = 4096 + 2560 + 48 + 15 = 6719_{10} 1A3F16=(1×163)+(10×162)+(3×161)+(15×160)=4096+2560+48+15=671910
]

背景知识:

十六进制的每一位代表的权重是 (16^n),这使得它非常适合表示较大的数,同时可以减少书写的长度。内存地址、汇编语言中的指令都是用十六进制表示的。

Java代码手动实现:

public class HexadecimalToDecimalManual {public static int hexadecimalToDecimal(String hexNum) {int decimal = 0;int base = 1; // 16^0char[] hexDigits = hexNum.toUpperCase().toCharArray();int len = hexDigits.length;for (int i = len - 1; i >= 0; i--) {if (hexDigits[i] >= '0' && hexDigits[i] <= '9') {decimal += (hexDigits[i] - '0') * base;} else if (hexDigits[i] >= 'A' && hexDigits[i] <= 'F') {decimal += (hexDigits[i] - 'A' + 10) * base;}base *= 16;}return decimal;}public static void main(String[] args) {System.out.println(hexadecimalToDecimal("1A3F"));  // 输出: 6719}
}

4. 十六进制转二进制(Hexadecimal to Binary, 16-2) 🧑‍💻

十六进制转二进制 非常简单。每一个十六进制数字对应四位二进制数。只需将每位十六进制数字分别转换成四位二进制数,最后将它们拼接起来。

步骤:

  1. 将每一个十六进制位转换为对应的四位二进制数。
  2. 将这些二进制数拼接在一起

,得到最终的二进制结果。

示例:

1A3F_{16} 转换为二进制:

  • 1 = 0001
  • A = 1010
  • 3 = 0011
  • F = 1111

所以:
1A3F_{16} = 0001\ 1010\ 0011\ 1111_2

背景知识:

二进制与十六进制之间的转换非常简便,尤其在处理大型的二进制数据时,十六进制能帮助我们更轻松地表示和阅读数据。许多程序员在调试时经常用到十六进制,因为它可以让复杂的二进制变得更加清晰易读。

Java代码手动实现:

public class HexadecimalToBinaryManual {public static String hexadecimalToBinary(String hexNum) {StringBuilder binary = new StringBuilder();char[] hexDigits = hexNum.toUpperCase().toCharArray();for (char hexDigit : hexDigits) {switch (hexDigit) {case '0': binary.append("0000"); break;case '1': binary.append("0001"); break;case '2': binary.append("0010"); break;case '3': binary.append("0011"); break;case '4': binary.append("0100"); break;case '5': binary.append("0101"); break;case '6': binary.append("0110"); break;case '7': binary.append("0111"); break;case '8': binary.append("1000"); break;case '9': binary.append("1001"); break;case 'A': binary.append("1010"); break;case 'B': binary.append("1011"); break;case 'C': binary.append("1100"); break;case 'D': binary.append("1101"); break;case 'E': binary.append("1110"); break;case 'F': binary.append("1111"); break;}}return binary.toString();}public static void main(String[] args) {System.out.println(hexadecimalToBinary("1A3F"));  // 输出: 0001101000111111}
}

5. 二进制转十进制(Binary to Decimal, 2-10) 💡

二进制 转换为 十进制 可以使用 权值展开法。二进制的每一位表示 2 的幂次方,通过计算每一位二进制对应的十进制值,并将这些值相加得到最终的十进制结果。

步骤:

  1. 将每个二进制位乘以 2 的幂次方。
  2. 将结果相加,得到十进制数。

示例:

1101101_2 转换为十进制:

[
110110 1 2 = ( 1 × 2 6 ) + ( 1 × 2 5 ) + ( 0 × 2 4 ) + ( 1 × 2 3 ) + ( 1 × 2 2 ) + ( 0 × 2 1 ) + ( 1 × 2 0 ) = 64 + 32 + 0 + 8 + 4 + 0 + 1 = 10 9 10 1101101_2 = (1 \times 2^6) + (1 \times 2^5) + (0 \times 2^4) + (1 \times 2^3) + (1 \times 2^2) + (0 \times 2^1) + (1 \times 2^0) = 64 + 32 + 0 + 8 + 4 + 0 + 1 = 109_{10} 11011012=(1×26)+(1×25)+(0×24)+(1×23)+(1×22)+(0×21)+(1×20)=64+32+0+8+4+0+1=10910
]

背景知识:

二进制 是计算机唯一能直接理解的数字系统。每一个二进制位(bit)都代表一个最小的存储单元,而它的值只能是 0 或 1。

Java代码手动实现:

public class BinaryToDecimalManual {public static int binaryToDecimal(String binaryNum) {int decimal = 0;int base = 1; // 2^0int len = binaryNum.length();for (int i = len - 1; i >= 0; i--) {if (binaryNum.charAt(i) == '1') {decimal += base;}base *= 2;}return decimal;}public static void main(String[] args) {System.out.println(binaryToDecimal("1101101"));  // 输出: 109}
}

6. 二进制转十六进制(Binary to Hexadecimal, 2-16) 🔄

二进制转十六进制 的转换方法非常简单,只需将二进制数每四位一组,转换为对应的十六进制数即可。

步骤:

  1. 将二进制数从右往左按四位分组。
  2. 将每组二进制数转换为对应的十六进制数。

示例:

1101101011_2 转换为十六进制:

  1. 从右向左分组:11011011
  2. 转换:
    • 1101 = D
    • 1011 = B

所以:
1101101011_2 = 1DB_{16}

背景知识:

二进制十六进制 之间的转换在计算机系统中非常常见。二进制数非常冗长且不易阅读,而十六进制数能简化表示,同时能保留二进制信息的精确度。

Java代码手动实现:

public class BinaryToHexadecimalManual {public static String binaryToHexadecimal(String binaryNum) {StringBuilder hex = new StringBuilder();int len = binaryNum.length();// 补齐长度为4的倍数while (len % 4 != 0) {binaryNum = "0" + binaryNum;len++;}for (int i = 0; i < len; i += 4) {String fourBits = binaryNum.substring(i, i + 4);switch (fourBits) {case "0000": hex.append("0"); break;case "0001": hex.append("1"); break;case "0010": hex.append("2"); break;case "0011": hex.append("3"); break;case "0100": hex.append("4"); break;case "0101": hex.append("5"); break;case "0110": hex.append("6"); break;case "0111": hex.append("7"); break;case "1000": hex.append("8"); break;case "1001": hex.append("9"); break;case "1010": hex.append("A"); break;case "1011": hex.append("B"); break;case "1100": hex.append("C"); break;case "1101": hex.append("D"); break;case "1110": hex.append("E"); break;case "1111": hex.append("F"); break;}}return hex.toString();}public static void main(String[] args) {System.out.println(binaryToHexadecimal("1101101011"));  // 输出: 1DB}
}

总结 🎯

在这篇博客中,我们通过丰富的例子讲解了六种常见的进制转换方式:从 十进制到二进制十进制到十六进制,再到 二进制、十六进制与十进制之间的转换。掌握这些进制转换技巧不仅有助于理解计算机底层数据的表示,还能帮助你在编程和调试中更加得心应手。

  • 十进制转二进制(10-2):除2取余法
  • 十进制转十六进制(10-16):除16取余法
  • 十六进制转十进制(16-10):权值展开法
  • 十六进制转二进制(16-2):每位对应四位二进制
  • 二进制转十进制(2-10):权值展开法
  • 二进制转十六进制(2-16):每四位二进制对应一位十六进制

进制转换是每个计算机组成原理课程的基础内容,它不仅帮助我们理解计算机如何存储和处理数据,还在编程和系统开发中有着广泛的应用。希望本文能够帮助你深入理解这些关键概念,成为进制转换的高手!💻✨

相关文章:

【ShuQiHere】 进制转换的世界:从十进制到二进制、十六进制的转换技巧

【ShuQiHere】 在计算机科学中&#xff0c;进制转换&#xff08;Radix Conversion&#xff09; 是一个基础且非常重要的技能。无论是理解计算机的存储、数据表示&#xff0c;还是在编程中处理不同的进制数据&#xff0c;进制转换都是不可或缺的。本文将详细讲解 十进制&#x…...

《化工管理》

《化工管理》征稿简则 《化工管理》杂志是由中国石油和化学工业联合会主管、中国化工企业管理协会主办&#xff0c;1986年创刊&#xff0c;在国内外公开发行&#xff0c;国内统一连续出版物号&#xff1a;CN 11—3991/F&#xff0c;中国标准连续出版物号&#xff1a;ISSN 1008—…...

LeetCode70:爬楼梯

class Solution { public:int climbStairs(int n) {if(n 1) return 1;if(n 2) return 2;vector<int> dp(n 1, 0);dp[1] 1;dp[2] 2;for(int i 3; i < n 1; i){dp[i] dp[i - 1] dp[i - 2];}return dp[n];} }; 这个题目也就是最简单的动态规划&#xff0c;题目…...

[程序员] 前人留下的苦难源,我们是否有勇气改正?

最近遇到一个客户现场发现的&#xff0c;表象是网络有问题&#xff0c;分析一圈下来发现是程序进入了某种死循环状态&#xff0c;耗尽CPU。 产品里的很多线程/进程的优先级设置的很高&#xff0c;甚至高过了内核运行程序的优先级&#xff0c;高过了产品内警告处理程序的运行&a…...

聚类_K均值

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs1.数据预处理 #创建基于高斯分布的样本点, x是点的坐标&#xff0c;y是所属聚类值 x, y make_blobs(n_samples100, centers6, random_state100, cluster_std0.6) # 设置图形尺寸…...

Mac电脑剪切板在哪里找 苹果电脑剪切板打开教程【详解】

Windows 和 Mac 电脑在使用方式上存在一些差异&#xff0c;许多习惯了 Windows 系统的用户初次接触 Mac 时可能会对某些操作感到困惑。比如&#xff0c;很多人会问&#xff1a;Mac 上的剪贴板在哪里&#xff1f;如果你也有这样的疑问&#xff0c;不妨看看下面这篇关于如何在 Ma…...

Python编程 - 三器一包

目录 前言 一、迭代器 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;迭代器和可迭代对象 &#xff08;三&#xff09;创建迭代器 &#xff08;四&#xff09;内置迭代器函数 &#xff08;五&#xff09;优点和局限性 二、生成器 &#xff08;一&…...

InternVL 多模态模型部署微调实践

友情链接 该文档参考InternVL垂直领域场景微调实践而写成&#xff0c;感谢社区同学法律人的文档。 写在前面&#xff08;什么是InternVL&#xff09; InternVL 是一种用于多模态任务的深度学习模型&#xff0c;旨在处理和理解多种类型的数据输入&#xff0c;如图像和文本。它…...

Ruby Dir 类和方法

Ruby Dir 类和方法 Ruby 中的 Dir 类提供了用于处理目录的各种方法。这些方法允许您列出目录内容、更改当前工作目录、创建和删除目录等。本文将详细介绍 Dir 类的常用方法&#xff0c;并通过示例展示如何使用它们。 目录 Dir 类的简介常用方法 Dir.chdirDir.childrenDir.de…...

C++STL~~deque

文章目录 deque的概念deque的使用deque的练习总结 deque的概念 deque(双端队列)&#xff1a;是一种序列容器、是一种双开口的"连续"空间的数据结构&#xff0c;双开口的含义是&#xff1a;可以在头尾两端进行插入和删除操作&#xff0c;且时间复杂度为O(1)&#xff…...

SpringCloud的学习,Consul服务注册与发现、分布式配置,以及 服务调用和负载均衡

介绍 Consul 是一套开源的分布式服务发现和配置管理系统&#xff0c;由 HashiCorp 公司用 Go 语言开发。 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用&#xff0c;也可以一起使用以构建全方位的服务网格&#xff0c;…...

闯关leetcode——26. Remove Duplicates from Sorted Array

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/ 内容 Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appear…...

基于A2C与超启发式的航天器星载自主任务规划算法-笔记

1. Actor-Critic 模块 主要文件&#xff1a;AC.py, PolicyNet.py, ValueNet.py作用&#xff1a;该模块实现了 A2C&#xff08;Advantage Actor-Critic&#xff09;强化学习算法。其中&#xff0c;ActorCritic 类是核心&#xff0c;它同时管理策略网络&#xff08;Actor&#x…...

[机器学习]决策树

1 决策树简介 2 信息熵 3 ID3决策树 3.1 决策树构建流程 3.2 决策树案例 4 C4.5决策树 5 CART决策树&#xff08;分类&回归&#xff09; 6 泰坦尼克号生存预测案例 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import …...

CentOS7更换阿里云yum更新源

目前CentOS内置的更新安装源经常报错无法更新&#xff0c;或者速度不够理想&#xff0c;这个时候更换国内的镜像源就是一个不错的选择。 备份内置更新源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里云repo源&#xff08;需要系统…...

算法参数对拥塞控制的影响

来看看参数对公平收敛的影响。仅假象一下就知道应该是个加权公平&#xff0c;但事实如何&#xff0c;还是要具体看一下。 首先看 aimd&#xff0c;标准的 reno 算法是每 round 之后 cwnd 加 1&#xff0c;但如果有些流加 1&#xff0c;有些流加 2&#xff0c;会如何&#xff1…...

Go websocket

Go 中的 gorilla/websocket 是一个常用且高效的 WebSocket 实现库&#xff0c;可以帮助你轻松地在 Web 应用中实现实时通信。学习 gorilla/websocket 的基本用法包括建立 WebSocket 连接、发送和接收消息、处理错误、以及在实际场景中的使用。以下是关于 gorilla/websocket 的学…...

C# 委托与事件 观察者模式

委托与事件是一种观察者模式。 什么是委托与事件 在c#中&#xff0c;委托类似于代理&#xff0c;也跟其它语言的函数指针、回调函数等相似&#xff0c;但委托是类型安全和可靠的。声明自定义委托时&#xff0c;加上delegate关键字&#xff0c;委托定义类似于接口。 事件是特殊…...

K8S - 用service account 登陆kubectl

刚安装好k8s时 我就可以用kubectl 在master server里管理k8s的资源。 这时我们是感觉不到 k8s的用户和权限管理存在的&#xff0c; 但是其实用户的配置都在kubeclt 的配置文件中 /etc/kubernetes/admin.conf 中 我们可以用下命令来查看当前正在用的帐号 rootk8s-master:~/.d…...

Redis 持久化机制详解

引言 Redis 是一款基于内存的高性能键值存储系统&#xff0c;为了在数据丢失时能快速恢复&#xff0c;Redis 提供了多种持久化机制。这些持久化机制可以将内存中的数据存储到磁盘上&#xff0c;确保即使系统重启或宕机后也能恢复数据。Redis 支持两种主要的持久化方式&#xf…...

猫抓浏览器扩展:轻松获取网页媒体资源的终极指南

猫抓浏览器扩展&#xff1a;轻松获取网页媒体资源的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为无法下载网页视频而烦恼吗&…...

G-Helper深度解析:华硕笔记本轻量级控制工具的技术架构与实战手册

G-Helper深度解析&#xff1a;华硕笔记本轻量级控制工具的技术架构与实战手册 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF…...

万象视界灵坛从零开始:开源多模态平台GPU算力适配与显存调优指南

万象视界灵坛从零开始&#xff1a;开源多模态平台GPU算力适配与显存调优指南 1. 平台概述与核心价值 万象视界灵坛是一款基于OpenAI CLIP模型的高级多模态智能感知平台&#xff0c;它将复杂的语义对齐任务转化为直观的像素风格交互体验。平台采用CLIP-ViT-L/14作为核心模型&a…...

3步完成:星图平台OpenClaw镜像体验Qwen3.5-9B基础功能

3步完成&#xff1a;星图平台OpenClaw镜像体验Qwen3.5-9B基础功能 1. 为什么选择星图平台体验OpenClaw 作为一个长期关注AI自动化工具的技术爱好者&#xff0c;我一直在寻找能够快速验证OpenClaw功能的方法。传统本地部署需要配置Python环境、解决依赖冲突、调试网络权限&…...

避免自激!AD8367用作AGC放大器时的PCB布局避坑指南与环路稳定性分析

避免自激&#xff01;AD8367用作AGC放大器时的PCB布局避坑指南与环路稳定性分析 在射频与中频电路设计中&#xff0c;AD8367作为一款高性能可变增益放大器(VGA)&#xff0c;因其宽增益范围(45dB)和集成平方律检波器特性&#xff0c;常被用于自动增益控制(AGC)系统。然而&#x…...

FFmpeg drawtext滤镜进阶:除了时间水印,你还能用它玩出什么花样?(动态文本+多位置叠加)

FFmpeg drawtext滤镜进阶&#xff1a;动态文本与多位置水印的创意实践 在视频处理领域&#xff0c;水印不仅是版权保护的标配工具&#xff0c;更是内容创作者展示品牌个性的画布。传统的时间戳水印早已无法满足专业用户的需求——想象一下&#xff0c;在直播流中实时显示股票行…...

【MicroPython】基于ESP32的REPL交互式在线仿真开发环境实战

1. 为什么你需要ESP32的MicroPython REPL环境 第一次接触MicroPython的开发者经常会问&#xff1a;为什么不用传统的C语言开发ESP32&#xff1f;这里有个很现实的痛点——当你需要快速验证一个硬件功能时&#xff0c;C语言那套编译、烧录、调试的流程实在太重了。我去年给团队…...

保姆级教程:用华为ENSP模拟器搞定AC+AP直连式组网(Web界面全流程)

华为ENSP模拟器实战&#xff1a;从零搭建ACAP无线网络的全流程解析 第一次打开华为ENSP模拟器时&#xff0c;面对密密麻麻的图标和复杂的网络拓扑&#xff0c;很多初学者都会感到无从下手。特别是当需要配置AC控制器和AP接入点组成的无线网络时&#xff0c;Web界面里那些专业术…...

工作流自动化革命:用KeymouseGo解放重复操作困境

工作流自动化革命&#xff1a;用KeymouseGo解放重复操作困境 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否每天重复…...

终极指南:如何免费下载Steam创意工坊模组,无需安装Steam客户端

终极指南&#xff1a;如何免费下载Steam创意工坊模组&#xff0c;无需安装Steam客户端 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾因游戏不在Steam平台而无法下载心…...