二进制转十进制:把一连串的位重新读成意义
这个换算在做什么
它把一串 0 和 1 当作 2 进制数来读,再用 10 进制复述一遍。当屏幕上的值本来就是机器格式——寄存器转储、掩码、标志字节——而你想问的却是一个人的问题,比如这个值有没有越过阈值,需要的正是这个方向。
按位加权求和的手算方法
从右往左,每一位分别是 1、2、4、8、16、32、64、128 这样的 2 的幂。把所有为 1 的位对应的权值加起来即可。10011100 中为 1 的位是 128、16、8、4,所以十进制值是 156。记住前几个权值之后,剩下的就只是很短的加法。
二进制转十进制对照表
常见位模式及其十进制值。全 1 的那几行最值得记:每一个都比下一个 2 的幂小 1,这也是 255 和 65535 在计算机里无处不在的原因。
| 二进制 | 十进制 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 10 | 2 |
| 11 | 3 |
| 1010 | 10 |
| 1111 | 15 |
| 10000 | 16 |
| 101010 | 42 |
| 11111111 | 255 |
| 100000000 | 256 |
读懂一个状态标志字节
状态字节其实不是一个数,而是八个是非答案被打包进同一个值里。转成十进制后,你得到一个可以用来比较和记录的紧凑句柄;具体的位则告诉了你究竟发生了什么。数据手册按位描述,日志文件按十进制记录,这个换算就是两者之间的那一步。
留意打头的零
前导零不改变数值——0011 和 11 都是三——但它改变宽度,而宽度决定了这个字段是一个字节还是四个字节。从定宽字段里复制出数值时,即使转换器会忽略补零,也请在笔记里把它保留下来。
常见问题
怎样在脑子里读二进制?
对八位二进制,从左到右在上方写下 128、64、32、16、8、4、2、1,再把所有 1 上方的数加起来。10011100 就是 128 + 16 + 8 + 4 = 156。练熟八位就足以覆盖绝大多数日常场景。
为什么 11111111 是 255 而不是 256?
因为八位能表示从 0 开始的 256 个不同值,其中最大的那个是 255。一般地,n 位最大能到 2 的 n 次方减 1。这个差一正是“一个字节装得下 256 个值、但 256 这个值装不进一个字节”的原因。
可以粘贴带空格的二进制吗?
可以。空格、制表符和下划线都会被忽略,所以从终端或内存转储复制来的字符串不必先清理。每四位或八位分一组只是方便阅读,本身不携带任何含义。
开头是 1 就代表这个数是负数吗?
只有在你事先约定这个字段是有符号补码时才是,而那是格式的属性,不是位的属性。单独看,11111111 就是 255。除非你显式输入负号,本转换器一律把输入当作非负的绝对值。
能转换的二进制串最长有多长?
足够长到你日常需要粘贴的任何内容——这里使用精确整数运算而不是浮点,所以不会像计算器那样随位数增长而失真。极长的输入会被明确拒绝,而不是被悄悄截断。