进制转换详解【2026】- 一文搞懂二进制、八进制、十进制、十六进制

进制转换详解【2026】- 一文搞懂二进制、八进制、十进制、十六进制

进制转换是计算机科学和编程的基础知识。理解不同进制系统及其转换方法,对于理解计算机底层原理、调试程序和处理数据都至关重要。本指南将深入讲解各种进制系统和转换方法。

目录

核心要点

常用进制系统

进制转换原理

转换方法详解

代码示例

实际应用场景

常见问题

总结

核心要点

进制基数:二进制(2)、八进制(8)、十进制(10)、十六进制(16)

位权展开:任何进制数都可以按位权展开为十进制

短除法:十进制转其他进制的通用方法

分组转换:二进制与八进制、十六进制可以直接分组转换

编程应用:内存地址、颜色值、权限等广泛使用不同进制

需要快速进行进制转换?试试我们的免费在线工具:

立即使用进制转换器

常用进制系统

二进制(Binary,基数2)

计算机内部使用的基本进制,只有0和1两个数字。

code

二进制: 1010 1100

前缀表示: 0b10101100 或 10101100B

特点:

直接对应计算机硬件的开/关状态

每一位称为一个比特(bit)

8位组成一个字节(byte)

八进制(Octal,基数8)

使用0-7共8个数字,常用于Unix文件权限。

code

八进制: 754

前缀表示: 0o754 或 0754

特点:

每个八进制位对应3个二进制位

Unix/Linux文件权限使用八进制表示

现代编程中使用较少

十进制(Decimal,基数10)

日常生活中使用的进制,使用0-9共10个数字。

code

十进制: 1234

无特殊前缀

十六进制(Hexadecimal,基数16)

使用0-9和A-F共16个字符,广泛用于编程。

code

十六进制: 1A2B

前缀表示: 0x1A2B 或 1A2Bh

特点:

每个十六进制位对应4个二进制位

内存地址、颜色值常用十六进制

一个字节可以用两个十六进制数表示

进制转换原理

位权展开法(任意进制转十进制)

任何进制的数都可以按位权展开为十进制:

code

数值 = Σ(数字 × 基数^位置)

示例:二进制 1011 转十进制

code

1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰

= 8 + 0 + 2 + 1

= 11₁₀

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

code

2F₁₆ = 2×16¹ + 15×16⁰

= 32 + 15

= 47₁₀

短除法(十进制转任意进制)

将十进制数不断除以目标基数,记录余数:

示例:十进制 47 转二进制

code

47 ÷ 2 = 23 ... 1

23 ÷ 2 = 11 ... 1

11 ÷ 2 = 5 ... 1

5 ÷ 2 = 2 ... 1

2 ÷ 2 = 1 ... 0

1 ÷ 2 = 0 ... 1

结果(从下往上读): 101111₂

分组转换法

二进制与八进制、十六进制可以直接分组转换:

二进制 ↔ 八进制(3位一组)

code

二进制: 101 111 010

八进制: 5 7 2

二进制 ↔ 十六进制(4位一组)

code

二进制: 1011 1101 0010

十六进制: B D 2

转换方法详解

二进制 ↔ 十进制

二进制

十进制

计算过程

1

1

1×2⁰ = 1

10

2

1×2¹ + 0×2⁰ = 2

100

4

1×2² = 4

1000

8

1×2³ = 8

1111

15

8+4+2+1 = 15

10000

16

1×2⁴ = 16

11111111

255

128+64+32+16+8+4+2+1 = 255

十六进制 ↔ 十进制

十六进制

十进制

二进制

0

0

0000

1

1

0001

9

9

1001

A

10

1010

B

11

1011

C

12

1100

D

13

1101

E

14

1110

F

15

1111

10

16

0001 0000

FF

255

1111 1111

100

256

0001 0000 0000

八进制 ↔ 十进制

八进制

十进制

二进制

0

0

000

7

7

111

10

8

001 000

77

63

111 111

100

64

001 000 000

777

511

111 111 111

代码示例

JavaScript

javascript

// 十进制转其他进制

const decimal = 255;

console.log(decimal.toString(2)); // "11111111" (二进制)

console.log(decimal.toString(8)); // "377" (八进制)

console.log(decimal.toString(16)); // "ff" (十六进制)

// 其他进制转十进制

console.log(parseInt('11111111', 2)); // 255

console.log(parseInt('377', 8)); // 255

console.log(parseInt('ff', 16)); // 255

// 使用字面量

const binary = 0b11111111; // 255

const octal = 0o377; // 255

const hex = 0xff; // 255

// 格式化输出

function formatNumber(num) {

return {

decimal: num,

binary: '0b' + num.toString(2),

octal: '0o' + num.toString(8),

hex: '0x' + num.toString(16).toUpperCase()

};

}

console.log(formatNumber(255));

// { decimal: 255, binary: '0b11111111', octal: '0o377', hex: '0xFF' }

Python

python

# 十进制转其他进制

decimal = 255

print(bin(decimal)) # '0b11111111'

print(oct(decimal)) # '0o377'

print(hex(decimal)) # '0xff'

# 其他进制转十进制

print(int('11111111', 2)) # 255

print(int('377', 8)) # 255

print(int('ff', 16)) # 255

# 使用字面量

binary = 0b11111111 # 255

octal = 0o377 # 255

hexadecimal = 0xff # 255

# 格式化输出

num = 255

print(f"十进制: {num}")

print(f"二进制: {num:b}")

print(f"八进制: {num:o}")

print(f"十六进制: {num:x}")

print(f"十六进制(大写): {num:X}")

# 带前缀格式化

print(f"二进制: {num:#b}") # 0b11111111

print(f"八进制: {num:#o}") # 0o377

print(f"十六进制: {num:#x}") # 0xff

Java

java

public class BaseConverter {

public static void main(String[] args) {

int decimal = 255;

// 十进制转其他进制

System.out.println(Integer.toBinaryString(decimal)); // 11111111

System.out.println(Integer.toOctalString(decimal)); // 377

System.out.println(Integer.toHexString(decimal)); // ff

// 其他进制转十进制

System.out.println(Integer.parseInt("11111111", 2)); // 255

System.out.println(Integer.parseInt("377", 8)); // 255

System.out.println(Integer.parseInt("ff", 16)); // 255

// 使用字面量

int binary = 0b11111111; // 255

int octal = 0377; // 255

int hex = 0xff; // 255

// 格式化输出

System.out.printf("十进制: %d%n", decimal);

System.out.printf("二进制: %s%n", Integer.toBinaryString(decimal));

System.out.printf("八进制: %o%n", decimal);

System.out.printf("十六进制: %x%n", decimal);

}

}

实际应用场景

1. 颜色表示

css

/* 十六进制颜色 */

color: #FF5733; /* RGB: 255, 87, 51 */

color: #F53; /* 简写: #FF5533 */

background: rgba(255, 87, 51, 0.5); /* 带透明度 */

2. 文件权限(Unix/Linux)

bash

# 八进制权限表示

chmod 755 script.sh # rwxr-xr-x

chmod 644 file.txt # rw-r--r--

# 权限位说明

# 7 = 111 = rwx (读+写+执行)

# 5 = 101 = r-x (读+执行)

# 4 = 100 = r-- (只读)

3. 内存地址

c

// C语言中的内存地址

int *ptr = (int *)0x7fff5fbff8ac;

printf("地址: %p\n", ptr); // 0x7fff5fbff8ac

4. 位运算

javascript

// 位运算使用二进制

const READ = 0b001; // 1

const WRITE = 0b010; // 2

const EXECUTE = 0b100; // 4

let permission = READ | WRITE; // 0b011 = 3

console.log(permission & READ); // 1 (有读权限)

console.log(permission & EXECUTE); // 0 (无执行权限)

5. IP地址

javascript

// IPv4地址可以用十进制或十六进制表示

// 192.168.1.1 = 0xC0A80101 = 3232235777

function ipToDecimal(ip) {

return ip.split('.').reduce((acc, octet) => (acc << 8) + parseInt(octet), 0) >>> 0;

}

console.log(ipToDecimal('192.168.1.1')); // 3232235777

console.log((3232235777).toString(16)); // c0a80101

常见问题

为什么计算机使用二进制?

计算机硬件基于电子开关,只有开(1)和关(0)两种状态,二进制正好对应这两种状态,实现简单可靠。

为什么十六进制在编程中很常用?

十六进制与二进制转换方便(4位二进制=1位十六进制),且比二进制更紧凑易读。一个字节(8位)可以用两个十六进制数表示。

如何快速判断二进制数的大小?

记住2的幂次:1, 2, 4, 8, 16, 32, 64, 128, 256...

二进制数的最高位1的位置决定了数的大致范围。

负数如何用二进制表示?

计算机通常使用补码表示负数。例如,8位有符号整数中,-1表示为11111111。

总结

进制转换是编程和计算机科学的基础技能。掌握不同进制系统及其转换方法,有助于理解计算机底层原理和解决实际编程问题。

快速总结:

二进制是计算机的基础,每位对应一个比特

十六进制常用于内存地址、颜色值等

八进制常用于Unix文件权限

位权展开法用于转十进制,短除法用于十进制转其他进制

二进制与八进制、十六进制可以直接分组转换

需要快速进行进制转换?试试我们的免费在线工具:

立即使用进制转换器

🎯 相关推荐

巴西全面占优赢球止颓 数据看上半场就领先
365bet真人体育

巴西全面占优赢球止颓 数据看上半场就领先

📅 07-02 👁️ 4537
微博抖音热搜多少钱?合规报价与价值解析
日博best365

微博抖音热搜多少钱?合规报价与价值解析

📅 02-10 👁️ 8579
天涯明月刀太白心法砭石怎么选 太白心法砭石搭配推荐
best365官网苹果下载

天涯明月刀太白心法砭石怎么选 太白心法砭石搭配推荐

📅 06-29 👁️ 6917
任信用审核中多久
日博best365

任信用审核中多久

📅 07-16 👁️ 1913
淘宝我的订单在哪里
365bet真人体育

淘宝我的订单在哪里

📅 07-13 👁️ 1616
王者荣耀巅峰赛几点到几点-王者荣耀巅峰赛怎么进入