首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言進制知識總結:二/八/十/十六進制轉換、內存存儲與負數表示

     編輯:關於C語言

C 語言進制知識總結

1. 什麼是進制

進制是計數規則:滿基數進一位。常用進制:

  • 二進制(基數 2):0, 1
  • 八進制(基數 8):0~7
  • 十進制(基數 10):0~9
  • 十六進制(基數 16):0~9, A~F (A=10...F=15)

計算機內存中**所有數據最終以二進制存儲**。

2. 進制轉換規則(以十進制 18 為例)

十進制 → 二進制

反覆除 2 取餘,逆序排列:

18 / 2 = 9 ... 0
 9 / 2 = 4 ... 1
 4 / 2 = 2 ... 0
 2 / 2 = 1 ... 0
 1 / 2 = 0 ... 1
→ 10010

十進制 → 八進制

反覆除 8 取餘:

18 / 8 = 2 ... 2
 2 / 8 = 0 ... 2
→ 22

十進制 → 十六進制

反覆除 16 取餘:

18 / 16 = 1 ... 2
 1 / 16 = 0 ... 1
→ 12 (即 0x12)

3. C 語言中字面量表示與輸出格式

進制字面量前綴示例 (18)printf 佔位符輸出示例
二進制0b / 0B (C23/GCC擴展)0b10010無標準佔位符需手動轉換
八進制0022%o22
十進制無18%d / %u18
十六進制0x / 0X0x12%x / %X12 / 12

4. 內存存儲細節

  • int 佔 4 字節 = 32 位。
  • 正數 18 在內存中(小端序,低位在低地址):
    00000000 00000000 00000000 00010010
  • 變量在內存中按地址**從高到低**分配(棧向下增長):
    int a=12; int b=13; → &a > &b,a 在高地址,b 在低地址。

5. 進制轉換公式

二進制 → 十進制

按權展開:0b1100 = 1×2³ + 1×2² + 0×2¹ + 0×2⁰ = 12

十進制 → 二進制

分解為 2 的冪次和:67 = 64 + 2 + 1 = 2⁶ + 2¹ + 2⁰ = 0b1000011

6. 進制相關核心知識點

n 位二進制能表示的無符號整數範圍

0 ~ 2ⁿ - 1。例如 3 位:0~7 (0b111);5 位:0~31 (0b11111)。

有符號整數表示(補碼)

  • 最高位(符號位)為 0 → 正數/零;為 1 → 負數。
  • 負數存儲:原碼取反加 1(補碼)。
  • 例子:+18 → 000...010010;-18 → 111...101110。

int 範圍推導

32 位,1 位符號位,31 位數值位:
最大值 2³¹ - 1 = 2,147,483,647 (0x7FFFFFFF)
最小值 -2³¹ = -2,147,483,648 (0x80000000)

7. 位運算與進制的實戰技巧

  • x & 1:判斷奇偶(最低位)。
  • x & (x-1):清除最低位 1。
  • x & -x:提取最低位 1。
  • x | (1<:置第 n 位為 1。
  • x & ~(1<:清第 n 位。
  • x ^ (1<:翻轉第 n 位。

總結

進制是計算機科學基石。熟練掌握「各進制互轉、C 語言字面量/輸出格式、內存補碼存儲、位運算技巧」,是寫出高效、正確、可移植 C 代碼的前提。建議背誦 2⁰~2¹⁶ 常用冪次值,養成「見十六進制即知二進制位模式」的直覺。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved