二进制转十进制转换器
这个二进制转十进制转换器可将二进制(基数 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 的幂次:
| 位 | 1 | 0 | 1 | 1 | 0 |
|---|---|---|---|---|---|
| 幂次 | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
| 权值 | 16 | 8 | 4 | 2 | 1 |
第三步:将每一位乘以对应的权值
- 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 = 2,加下一位 1 = 3
- 3 × 2 = 6,加下一位 0 = 6
- 6 × 2 = 12,加下一位 1 = 13
- 13 × 2 = 26,加下一位 0 = 26
结果:二进制 11010 = 十进制 26
示例:10110011 转十进制
输入:10110011
- 开始:1
- 1 × 2 = 2,加 0 = 2
- 2 × 2 = 4,加 1 = 5
- 5 × 2 = 10,加 1 = 11
- 11 × 2 = 22,加 0 = 22
- 22 × 2 = 44,加 0 = 44
- 44 × 2 = 88,加 1 = 89
- 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 位) | 十六进制 | 八进制 |
|---|---|---|---|
| 0 | 00000000 | 00 | 0 |
| 1 | 00000001 | 01 | 1 |
| 2 | 00000010 | 02 | 2 |
| 4 | 00000100 | 04 | 4 |
| 8 | 00001000 | 08 | 10 |
| 10 | 00001010 | 0A | 12 |
| 16 | 00010000 | 10 | 20 |
| 32 | 00100000 | 20 | 40 |
| 42 | 00101010 | 2A | 52 |
| 64 | 01000000 | 40 | 100 |
| 100 | 01100100 | 64 | 144 |
| 127 | 01111111 | 7F | 177 |
| 128 | 10000000 | 80 | 200 |
| 255 | 11111111 | FF | 377 |
此表涵盖完整的单字节范围(0–255)。对于超过 255 的数值,对更长的二进制数应用相同的按权展开法即可。
有符号二进制与补码
无符号二进制只能表示非负整数。为了表示负数,计算机使用补码,这是几乎所有现代处理器采用的标准有符号二进制表示法。
补码的工作原理
在补码中,最高有效位(最高位)是符号位:0 表示正数,1 表示负数。其余位保存数值大小,但负数通过"取反加一"进行编码。
示例:将 8 位有符号二进制 11111001 转换为十进制
- 最高位为 1,因此该数为负数
- 各位取反:11111001 → 00000110
- 加 1:00000110 + 1 = 00000111 = 7
- 添加负号:−7
补码的表示范围
| 位数 | 最小值 | 最大值 | 可表示的总数 |
|---|---|---|---|
| 8 | −128 | 127 | 256 |
| 16 | −32,768 | 32,767 | 65,536 |
| 32 | −2,147,483,648 | 2,147,483,647 | 4,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(可变长度二进制序列)
- 密码学: 二进制运算是异或加密、哈希函数和分组密码的基础
相关转换器
- 十六进制转二进制转换器 — 将十六进制数转换为带 4 位分组的二进制表示
- 二进制转八进制转换器 — 通过 3 位分组将二进制转换为八进制(以 8 为基数)
- 二进制翻译器 — 在二进制与文本(ASCII/Unicode)之间双向转换
- 十六进制转十进制转换器 — 将十六进制数值转换为十进制数
- Base64 编解码器 — 对数据进行 Base64 格式的编码与解码