二進制、八進制、十進制和十六進制間的轉換(原理及工程實現)

????????在計算機科學和編程中,進制轉換是一個非常重要的基礎知識。無論是二進制、八進制、十進制還是十六進制,它們在不同的場景中都有廣泛的應用。本文將詳細介紹常用進制之間的轉換方法,并附上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.pswp.cn/news/897051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897051.shtml
英文地址,請注明出處:http://en.pswp.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…