二进制转十进制转换器

这个二进制转十进制转换器可将二进制(基数 2)数转换为十进制(基数 10)数值。输入任意二进制数,即可查看对应的十进制结果,并附有逐步分解说明,展示每个位的权值如何构成最终结果。

二进制转十进制转换器

在二进制和十进制之间即时转换。

常见问题

如何将二进制转换为十进制?

将每个二进制数字乘以2的相应次幂(从右侧0开始),然后将所有结果相加。例如,二进制1011 = (1×2³) + (0×2²) + (1×2¹) + (1×2⁰) = 8 + 0 + 2 + 1 = 十进制11。这种位置记数法适用于任何长度的二进制数。

什么是二进制数字系统?

二进制数字系统(基数2)只使用两个数字:0和1。每个数字位置代表2的幂次,就像十进制中每个位置代表10的幂次一样。二进制是计算机的基本语言,因为数字电路有两种状态:开(1)和关(0)。计算机中所有数据,从文本到图像到视频,最终都以二进制数形式存储和处理。

什么是有符号二进制到十进制的转换?

有符号二进制使用一位(最左边,称为符号位)来表示数字是正数还是负数。在最常见的表示法——补码中,如果符号位为0则数字为正,正常读取;如果符号位为1则数字为负:反转所有位,加1,然后在前面加负号。例如,8位有符号二进制11111001表示-7,因为反转得到00000110(6),加1得到7。

补码是如何工作的?

补码是计算机表示负整数的标准方式。求一个二进制数的补码:(1)反转所有位(将0变为1,将1变为0),然后(2)将结果加1。例如,在8位补码中表示-5:从5=00000101开始,反转得到11111010,加1得到11111011。要还原:如果符号位为1,反转所有位并加1。n位补码数的范围是-2^(n-1)到2^(n-1)-1。

如何将二进制小数转换为十进制?

对于小数点(二进制点)后的二进制数字,将每位乘以2的负幂次。小数点后第一位是2^(-1)=0.5,第二位是2^(-2)=0.25,第三位是2^(-3)=0.125,依此类推。例如,二进制101.11 = (1×4) + (0×2) + (1×1) + (1×0.5) + (1×0.25) = 4 + 0 + 1 + 0.5 + 0.25 = 十进制5.75。

什么是Double Dabble方法?

Double Dabble(也称为倍增法)是二进制到十进制转换的心算捷径。从最左边的位开始。将运行总数翻倍并加上当前位。对每一位重复此操作。例如,1101:从1开始,翻倍得2再加1=3,翻倍得6再加0=6,翻倍得12再加1=13。这种方法避免了计算2的幂次,对于心算来说更快。

二进制、八进制、十进制和十六进制有什么区别?

二进制(基数2)使用0-1的数字,八进制(基数8)使用0-7,十进制(基数10)使用0-9,十六进制(基数16)使用0-9和A-F。每种系统以不同方式表示相同的值。二进制是计算机原生的,十进制是人类使用的,而八进制/十六进制是二进制的紧凑简写,因为8=2³,16=2⁴。例如,十进制255在二进制中是11111111,在八进制中是377,在十六进制中是FF。

二进制中的LSB和MSB是什么?

LSB(最低有效位)是二进制数中最右边的位,代表2⁰=1。MSB(最高有效位)是最左边的位,代表最高的2的幂次。在二进制数10110中,LSB是0(最右边),MSB是1(最左边,代表2⁴=16)。在有符号二进制中,MSB也作为符号位,表示正数(0)或负数(1)。

如何将8位二进制转换为十进制?

对于8位无符号二进制数,将每位乘以其2的幂次(从2⁷=128到2⁰=1)并求和。例如,10110011 = 128+0+32+16+0+0+2+1 = 179。对于有符号8位(补码),如果MSB为1则数字为负:反转位,加1,取负。无符号范围为0-255;有符号范围为-128到127。

8、16和32位中最大的十进制数是什么?

对于无符号整数:8位最大值为255(2⁸-1),16位最大值为65,535(2¹⁶-1),32位最大值为4,294,967,295(2³²-1)。对于有符号补码:8位最大值为127(2⁷-1),16位最大值为32,767(2¹⁵-1),32位最大值为2,147,483,647(2³¹-1)。每增加一位,可能值的数量翻倍。

如何在Python和JavaScript中将二进制转换为十进制?

在Python中,使用int("binary_string", 2)将二进制转换为十进制。例如:int("1011", 2)返回11。在JavaScript中,使用parseInt("binary_string", 2)。例如:parseInt("1011", 2)返回11。两个函数都接受0和1组成的字符串以及基数(2表示二进制)作为参数,返回十进制整数值。

什么是浮点二进制?

浮点二进制是计算机用来表示实数(小数)的IEEE 754标准。32位浮点数使用1位表示符号,8位表示指数,23位表示尾数(小数部分)。64位双精度浮点数使用1+11+52位。值等于(-1)^符号 × 1.尾数 × 2^(指数-偏置)。这种格式可以表示非常大和非常小的数字,但可能存在精度限制,这就是为什么在大多数编程语言中0.1+0.2不完全等于0.3。

二进制转十进制的方法

二进制转十进制使用按权展开法,这是所有进制数系统共用的核心原理。二进制数的每一位代表 2 的某次幂,就像十进制数的每一位代表 10 的某次幂一样。二进制是以 2 为基数的数制,只有两个符号(0 和 1),每个位置从右到左依次翻倍:1、2、4、8、16、32、64、128,以此类推。

按权展开法(逐步操作)

第一步:写下二进制数

写出每一个二进制位,例如:10110

第二步:从右到左为每一位标注 2 的幂次

从位置 0(最低位)开始,为每一位标注对应的 2 的幂次:

10110
幂次2⁴2⁰
权值168421

第三步:将每一位乘以对应的权值

  • 1 × 2⁴ = 16
  • 0 × 2³ = 0
  • 1 × 2² = 4
  • 1 × 2¹ = 2
  • 0 × 2⁰ = 0

第四步:将所有乘积相加,得到十进制结果

16 + 0 + 4 + 2 + 0 = 22

通用公式

十进制 = b(n) × 2ⁿ + b(n-1) × 2ⁿ⁻¹ + ... + b(1) × 2¹ + b(0) × 2⁰

其中 b(i) 为第 i 位的二进制数字(0 或 1)。

逐次倍增法

逐次倍增法(也称"双重叠加法")是一种心算捷径,无需计算 2 的较大次幂。该方法从左到右逐位处理,规则简单:将当前累加值翻倍,再加上当前位

示例:11010 转十进制

输入:11010

  1. 从最高位开始:1(当前累加值 = 1)
  2. 1 × 2 = 2,加下一位 1 = 3
  3. 3 × 2 = 6,加下一位 0 = 6
  4. 6 × 2 = 12,加下一位 1 = 13
  5. 13 × 2 = 26,加下一位 0 = 26

结果:二进制 11010 = 十进制 26

示例:10110011 转十进制

输入:10110011

  1. 开始:1
  2. 1 × 2 = 2,加 0 = 2
  3. 2 × 2 = 4,加 1 = 5
  4. 5 × 2 = 10,加 1 = 11
  5. 11 × 2 = 22,加 0 = 22
  6. 22 × 2 = 44,加 0 = 44
  7. 44 × 2 = 88,加 1 = 89
  8. 89 × 2 = 178,加 1 = 179

结果:二进制 10110011 = 十进制 179

逐次倍增法在手动转换较长二进制数时尤为实用,因为无需记忆 2 的较大次幂。

转换示例

1010 转十进制

  • 1 × 2³ = 8
  • 0 × 2² = 0
  • 1 × 2¹ = 2
  • 0 × 2⁰ = 0

8 + 0 + 2 + 0 = 10

11111111 转十进制(8 位全 1)

  • 1 × 128 = 128
  • 1 × 64 = 64
  • 1 × 32 = 32
  • 1 × 16 = 16
  • 1 × 8 = 8
  • 1 × 4 = 4
  • 1 × 2 = 2
  • 1 × 1 = 1

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

这是单字节(8 位)无符号整数的最大值:2⁸ − 1 = 255。

10000000 转十进制

只有最高位(最高有效位)为 1:

1 × 2⁷ = 128

在 8 位有符号补码表示中,相同的位模式代表 −128,即 8 位有符号数的最小值。

1100100 转十进制

  • 1 × 64 = 64
  • 1 × 32 = 32
  • 0 × 16 = 0
  • 0 × 8 = 0
  • 1 × 4 = 4
  • 0 × 2 = 0
  • 0 × 1 = 0

64 + 32 + 0 + 0 + 4 + 0 + 0 = 100

二进制转十进制对照表(快速参考)

下表列出 2 的各次幂及常用字节值。完整的 0–255 对照表请使用上方转换器中的展开功能。

十进制二进制(8 位)十六进制八进制
000000000000
100000001011
200000010022
400000100044
8000010000810
10000010100A12
16000100001020
32001000002040
42001010102A52
640100000040100
1000110010064144
127011111117F177
1281000000080200
25511111111FF377

此表涵盖完整的单字节范围(0–255)。对于超过 255 的数值,对更长的二进制数应用相同的按权展开法即可。

有符号二进制与补码

无符号二进制只能表示非负整数。为了表示负数,计算机使用补码,这是几乎所有现代处理器采用的标准有符号二进制表示法。

补码的工作原理

在补码中,最高有效位(最高位)是符号位:0 表示正数,1 表示负数。其余位保存数值大小,但负数通过"取反加一"进行编码。

示例:将 8 位有符号二进制 11111001 转换为十进制

  1. 最高位为 1,因此该数为负数
  2. 各位取反:11111001 → 00000110
  3. 加 1:00000110 + 1 = 00000111 = 7
  4. 添加负号:−7

补码的表示范围

位数最小值最大值可表示的总数
8−128127256
16−32,76832,76765,536
32−2,147,483,6482,147,483,6474,294,967,296

二进制小数转十进制

二进制数可以有小数部分,由二进制小数点分隔(类似于十进制小数点)。小数点后的每一位代表 2 的负次幂:2⁻¹ = 0.5、2⁻² = 0.25、2⁻³ = 0.125,以此类推。

示例:101.11 转十进制

整数部分(101):

  • 1 × 2² = 4
  • 0 × 2¹ = 0
  • 1 × 2⁰ = 1

小数部分(.11):

  • 1 × 2⁻¹ = 0.5
  • 1 × 2⁻² = 0.25

4 + 0 + 1 + 0.5 + 0.25 = 5.75

示例:1.0101 转十进制

  • 1 × 2⁰ = 1
  • 0 × 2⁻¹ = 0
  • 1 × 2⁻² = 0.25
  • 0 × 2⁻³ = 0
  • 1 × 2⁻⁴ = 0.0625

1 + 0 + 0.25 + 0 + 0.0625 = 1.3125

注意: 某些十进制小数无法用二进制精确表示(例如,十进制 0.1 在二进制中是无限循环小数:0.0001100110011...)。这正是浮点运算在编程中可能产生微小舍入误差的原因。

编程语言中的二进制转十进制

大多数编程语言都内置了将二进制字符串转换为十进制整数的函数。

Python

# 将二进制字符串转换为十进制
binary_str = "10110011"
decimal_value = int(binary_str, 2)
print(decimal_value)          # 179

# Python 中的二进制字面量
x = 0b10110011
print(x)                      # 179

# 将十进制转回二进制
print(bin(179))               # '0b10110011'

# 有符号 8 位补码转换
def signed_binary_to_decimal(binary_str, bits=8):
    value = int(binary_str, 2)
    if value >= 2**(bits - 1):
        value -= 2**bits
    return value

print(signed_binary_to_decimal("11111001"))  # -7
print(signed_binary_to_decimal("01111111"))  # 127

JavaScript

// 将二进制字符串转换为十进制
const binaryStr = "10110011";
const decimal = parseInt(binaryStr, 2);
console.log(decimal);           // 179

// JavaScript 中的二进制字面量
const x = 0b10110011;
console.log(x);                 // 179

// 将十进制转回二进制
console.log((179).toString(2)); // '10110011'

// 处理超大二进制数时使用 BigInt
const bigBin = "1111111111111111111111111111111111111111";
const bigDec = BigInt("0b" + bigBin);
console.log(bigDec.toString()); // '1099511627775'

C 语言

#include <stdio.h>
#include <string.h>
#include <math.h>

long binaryToDecimal(const char *binary) {
    long decimal = 0;
    int len = strlen(binary);
    for (int i = 0; i < len; i++) {
        if (binary[i] == '1') {
            decimal += (long)pow(2, len - 1 - i);
        }
    }
    return decimal;
}

int main() {
    printf("%ld\n", binaryToDecimal("10110011")); // 179
    printf("%ld\n", binaryToDecimal("11111111")); // 255
    printf("%ld\n", binaryToDecimal("1100100"));  // 100
    return 0;
}

应用场景

  • 计算机体系结构: 理解处理器如何在二进制层面处理数据,并将结果转换为人类可读的十进制输出
  • 网络: 网络地址和子网掩码计算需要二进制与十进制之间的转换(例如,子网掩码 11111111.11111111.11111111.00000000 = 255.255.255.0)
  • 数字电子: 读取传感器输出、模数转换器数值以及逻辑门状态
  • 编程: 位运算、位标志、权限控制及二进制数据调试
  • 数据编码: 理解字符编码,如 ASCII(7 位)和 UTF-8(可变长度二进制序列)
  • 密码学: 二进制运算是异或加密、哈希函数和分组密码的基础

相关转换器

相关工具