进制转换
进制转换是一个免费在线工具:把一个数在二进制、八进制、十进制、十六进制及任意 2-36 进制之间互转,四种常用进制同屏并列。整数全程用 BigInt 计算,几千位大数不丢精度;小数标出循环节,0.1 转二进制是 0.0(0011) 而非看似精确的截断值;负数可切 8/16/32/64/128 位补码视图,看位模式与大小端字节序;还能展开除基取余手算步骤或批量转多行。浏览器本地计算,数据不上传。
请输入要转换的数值
🔒 全部换算都在你的浏览器本地用 JavaScript 的 BigInt 完成,输入的数值不发送到任何服务器, 也不写入本地存储(只记住源进制、位宽、小数位数这些参数偏好),关闭页面即清除。 整数最多 4096 位、小数最多输出 512 位,超出上限会明确告诉你截在哪里,绝不静默丢内容。
如何使用进制转换
输入要转换的数值并选源进制:把数字填进上方输入框(156、0x9c、0b1010、-5、0.1、zz 都行),源进制默认「自动识别」,页面会告诉你它按几进制解析、依据是什么。识别有歧义时(比如 1010 既像十进制也像二进制)只会提示,不会替你改判,点一下提示里的按钮才切换。
在结果区同屏看 2 / 8 / 10 / 16 四个进制:四张卡片实时给出结果与位数,右边那张「自定义进制」卡片可以填 2-36 里的任意一个。想一次看全 35 个进制,展开「全部 2-36 进制」即可整表复制成 TSV。
复制结果,或展开补码与手算步骤:每张卡片都能一键复制,开了分组显示时还可以「复制纯数字」拿到不含空格的版本。负数把「负数怎么看」切成定宽补码就能看位模式与大小端字节序;「手算步骤」会把除基取余和按权展开一步步列出来,作业和考试可以照着核对。
关于进制转换的常见问题
- 进制转换会上传我的数据吗?
- 不会,进制转换不上传任何数据。所有换算都在你的浏览器本地用 JavaScript 的 BigInt 完成,输入的数值不发送到任何服务器,关闭页面即清除,也不写入本地存储——本页只把源进制、位宽、小数位数、大小写这几项参数偏好记在本机,输入的数字一个都不落盘,更不会把它同步到网址里。想自证很简单:打开 F12 的网络面板再转一次,换算过程一个请求都不发,断开网络照样出结果。页面本身只加载了站点访问统计脚本,它读不到、也不会上报你输入的数字。
- 十进制转二进制怎么算?除基取余法怎么用?
- 把十进制数反复除以 2、记下每次的余数,除到商为 0,再把余数从下往上读出来。例如 156÷2=78 余 0、78÷2=39 余 0、39÷2=19 余 1、19÷2=9 余 1、9÷2=4 余 1、4÷2=2 余 0、2÷2=1 余 0、1÷2=0 余 1,从下往上读就是 10011100。本页的「手算步骤」会把每一步都列出来,还能换成除以 8 或除以 16,作业和考试可以照着核对。
- 0x 开头是什么进制?0b、0o 又是什么?
- 0x 是十六进制(0x9c 就是 156),0b 是二进制(0b1010 是多少?按二进制读就是十进制 10),0o 是八进制(0o234 就是 156),此外还有老写法在数字结尾加 h 表示十六进制(9ch)。本页选「自动识别」时会按前缀判断并告诉你依据。要注意 0b1010 作为十六进制串同样合法(等于 0x0B1010),所以页面会给一个一键改判的按钮,而不是替你猜。
- 十六进制字母代表多少?ff 是多少?
- 十六进制用 0-9 再加 a-f 表示 10 到 15:a=10、b=11、c=12、d=13、e=14、f=15。所以 ff = 15×16 + 15 = 255,正好是一个字节能表示的最大无符号数;ffff = 65535,是端口号的上限;ffffffff = 4294967295,是 32 位无符号数的上限。大小写不影响数值,FF 和 ff 是同一个数,本页的「字母用大写」开关只改显示。
- 二进制怎么快速转八进制和十六进制?
- 用分组法,不用回十进制绕一圈:从右往左每 3 位一组得八进制,每 4 位一组得十六进制,不够位数就在左边补零。例如 10011100 按 3 位分成 010 011 100 就是八进制 234,按 4 位分成 1001 1100 就是十六进制 9c。原理是 8 = 2 的 3 次方、16 = 2 的 4 次方,一位刚好装下三位或四位二进制。本页的「分组显示」开关就是按这个习惯把结果切开的。
- chmod 755 是几进制?755 权限是八进制吗
- chmod 后面的 755 是八进制,一位管一组人。把每一位单独展开成三位二进制:7 是 111、5 是 101,拼起来就是 111101101,三位一组依次是属主、同组、其他人,每组的三位分别代表读(4)、写(2)、执行(1)——所以 755 是属主 rwx、其余人 r-x;644 展开是 110100100,也就是 rw-r--r--。在本页算要先把源进制手动选成 8 再输入 755,直接粘 0755 会按十进制读成 755(而十进制 755 的八进制其实是 1363),这是这类换算最容易踩的坑。所以「0755 是十进制还是八进制」取决于谁在读:shell 与 C 里以 0 开头就是八进制,本页的自动识别没有这个约定,会按十进制读,需要你手动把源进制选成 8。
- 十六进制颜色转 RGB 怎么换成十进制?
- 把 6 位十六进制颜色码每 2 位切一段,三段依次是红、绿、蓝通道,各自转成十进制就得到 RGB。以 #FF5733 为例:ff 是 255、57 是 87、33 是 51,所以它等于 rgb(255, 87, 51)。为什么是两位一段?因为一个颜色通道占一个字节,而两位十六进制刚好覆盖 0 到 255。在本页把源进制选成 16,分别输入 ff、57、33,看十进制那张卡片即可;反过来从 RGB 求色值就把源进制选成 10,输入 87 得到十六进制 57,不足两位时在左边补一个 0 再拼接。
- IP 子网掩码转二进制怎么数出位数?
- 把点分十进制的四段分别转成二进制、补满 8 位,再数一共有多少个连续的 1,这个数就是掩码位数。255.255.255.0 的前三段都是 11111111、最后一段是 00000000,共 24 个 1,写成 /24;255.255.255.192 的末段 192 是 11000000,多出两个 1,就是 /26。/24 的含义是前 24 位归网络号、剩下 8 位留给主机,可用地址数是 2 的 8 次方再减去网络号和广播地址两个。在本页把源进制选成 10 逐段输入即可,位数不足 8 位时自己在左边补零补满一个字节。
- 为什么 0.1 转成二进制转不尽?
- 因为 0.1 = 1/10,约分后的分母 10 含有质因数 5,而二进制的基数 2 里没有 5,除不尽就会无限循环:0.1(10) = 0.0(0011)(2),括号里的 0011 是循环节。十六进制的基数 16 同样只有质因数 2,所以 0.1 在十六进制里也是循环的 0.1(9)。这正是浮点数里 0.1 + 0.2 不等于 0.3 的根源。本页会直接把循环节标出来,不会给你一个看着精确其实被悄悄截断的结果。
- 负数的二进制怎么表示?-5 的补码是多少?
- 计算机用补码表示负数:先写出 5 的二进制 00000101,按位取反得 11111010,再加 1 得 11111011,也就是十六进制 0xFB。同一串位模式按无符号读是 251、按有符号读是 -5,区别只在怎么解读它。位宽决定能表示的范围,8 位有符号是 -128 到 127,超出叫溢出,本页会明确提示而不是悄悄截断。把「负数怎么看」切成定宽补码就能看到位模式、按字节分组和大小端字节序。
- 大数进制转换为什么别的工具算错?
- 很多在线工具用 parseInt 或浮点数做换算,超过 2 的 53 次方减一(9007199254740991)就会静默丢精度,比如 9007199254740993 会被算成 9007199254740992,结果看着很正常但已经错了。本页全程用 BigInt,整数最多支持 4096 位,2 的 64 次方减一、512 位大数都能原样往返,9007199254740993 的十六进制是 20000000000001 而不是 20000000000000。
- Base64 是 64 进制吗?Base58 呢?
- 都不是。进制转换是按权展开的数值换算,结果保留大小关系,9c 就是比 9b 大 1,可以继续做算术;Base64、Base32、Base58 是把字节重新书写成一串字符的编码,有填充、字母表各家不同、也不保序,两个 Base64 串比大小没有意义。要做 Base64 请用站内的「Base64 编码解码」,本页只做数值进制。
- 进制转换最多支持多少进制?为什么不是 64 进制?
- 支持 2 到 36 进制,因为通用的数字符号只有 0-9 和 a-z 共 36 个,再往上就要区分大小写,而大小写字母表并没有统一标准(Base62 各家实现不一致),强行支持只会让结果无法互认。36 进制常用于短链接 ID 和订单号,例如十进制 1000000 在 36 进制里是 lfls,五位变四位。
- 批量进制转换一次能转多少个数?
- 可以。切到「批量转换」标签,一行填一个数,也可以直接拖入 .txt 或 .csv 文件,最多 20000 行;结果是一张表格,可以复制成 TSV 贴进 Excel,或下载成带 UTF-8 BOM 的 .tsv 文件——加上 BOM 是为了让 Excel 双击打开时按 UTF-8 读,中文不会变成乱码。单个数的整数部分最多 4096 位,小数最多输出 512 位。行数或位数超过上限时会明确告诉你已经处理到哪里,不会静默丢内容;某一行写错也只标那一行,不会中断整批。
- 010 是十进制 10 还是八进制 8?
- 本页按十进制 10 处理,并在识别条上给出提示和一个「按 8 进制解析」的按钮。因为在 C 语言和旧版 JavaScript 里以 0 开头的字面量表示八进制(010 等于 8),但在日常书写里 010 通常就是 10,无法凭空判断。同理 1010 也不会被自动当成二进制。不猜是本页的产品决策:误判一个数的代价,比多问一句大得多。
- 进制转换工具免费吗?需要注册吗?
- 免费,不用注册、不用登录,也不装插件,没有次数限制,批量结果与 .tsv 下载都不加水印。之所以能一直免费,是因为换算全发生在你自己的浏览器里,站方不承担服务器算力成本——这也意味着页面打开之后断网照样能用,在没有外网的内网机器上做十六进制换算同样不受影响。真正的上限只有三条:单个数整数部分 4096 位、小数 512 位、批量 20000 行。
- 手机上能用进制转换工具吗?
- 可以,用手机浏览器打开本页就行,iOS Safari、安卓 Chrome、微信内置浏览器都能跑,不用装 App。窄屏下四张结果卡片会自动竖着排,源进制、位宽这排控件也会自动折行,不会挤成一条要横向滑的长条;结果长按可直接选中,也可以点卡片上的复制按钮。手机上最常用的是临时查一个值——比如 ff 是多少、某个权限位对应几,这类单次换算和电脑上完全一致;要贴几千行做批量转换,还是电脑更顺手。
进制转换十个常用方向:输入什么、得到什么
这类工具的叫法很多——进制转换器、进制转换计算器、在线进制转换、进制转换在线工具、免费在线进制转换、进制转换器在线, 或者干脆按方向叫二进制转换、十六进制转换、二进制十六进制转换——说的都是下面这十个方向。 表里全部用同一个数 156 走一遍,每一行的结果都是页面现场算的, 和上面那个转换器共用同一份代码。
| 换算方向 | 输入 | 源进制 | 结果 | 在本页怎么做 |
|---|---|---|---|---|
| 二进制转十进制 | 10011100 | 二进制 | 156 | 源进制选 2,看 10 进制那张卡片 |
| 十进制转二进制 | 156 | 十进制 | 10011100 | 源进制选 10,看 2 进制那张卡片 |
| 十六进制转十进制 | 9c | 十六进制 | 156 | 源进制选 16,看 10 进制那张卡片 |
| 十进制转十六进制 | 156 | 十进制 | 9c | 源进制选 10,看 16 进制那张卡片 |
| 二进制转十六进制 | 10011100 | 二进制 | 9c | 源进制选 2,看 16 进制那张卡片 |
| 十六进制转二进制 | 9c | 十六进制 | 10011100 | 源进制选 16,看 2 进制那张卡片 |
| 八进制转十进制 | 234 | 八进制 | 156 | 源进制选 8,看 10 进制那张卡片 |
| 十进制转八进制 | 156 | 十进制 | 234 | 源进制选 10,看 8 进制那张卡片 |
| 二进制转八进制 | 10011100 | 二进制 | 234 | 源进制选 2,看 8 进制那张卡片 |
| 八进制转十六进制 | 234 | 八进制 | 9c | 源进制选 8,看 16 进制那张卡片 |
能做的不止这十个方向:任意进制转换(源和目标都能在 2-36 里任选)、36 进制转换、32 进制转换与 26 进制转换(十进制 1000000 依次是 lfls、 ugi0 和 24n7e)、 几千位的大整数进制转换、带小数点的小数进制转换,都在同一个输入框里完成,不用换页重填。
常用进制速查:前缀、合法字符与用途
进制的差别只有一件事——逢几进一。二进制逢二进一、十六进制逢十六进一, 数值本身完全没变,变的只是写法。下面这张表是本页支持的 2-36 进制里最常用的几个, 前缀那一列决定了「自动识别」能不能一眼认出你输入的是什么。
| 进制 | 名称 | 前缀 | 合法字符 | 平时用在哪儿 |
|---|---|---|---|---|
| 2 | 二进制 | 0b | 0-1 | 计算机底层的位模式,一位就是 1 bit,八位凑成一个字节 |
| 8 | 八进制 | 0o | 0-7 | Linux 文件权限 chmod 755、C 语言的旧式字面量 0755 |
| 10 | 十进制 | (无) | 0-9 | 日常计数,人类通用 |
| 16 | 十六进制 | 0x | 0-9 a-f | 内存地址、颜色 #FF8800、哈希值,一位顶四位二进制 |
| 32 | 32 进制 | (无) | 0-9 a-v | 每 5 位二进制一组;注意 Base32 是编码不是这个进制 |
| 36 | 36 进制 | (无) | 0-9 a-z | 短链接 ID、订单号常用;0-9 加 a-z 刚好用满 36 个符号 |
没有前缀的进制(比如 36 进制)无法从写法上判断,必须手动选源进制;这也是为什么本页把 「源进制」放在最显眼的位置,而不是让你猜工具猜得对不对。
八进制和十六进制平时用在哪:四个真实场景
问「进制转换到底什么时候用得上」的人,多半是被下面这四个场景之一堵在半路—— 权限数字、颜色码、子网掩码、短 ID。它们看着毫不相干,其实都是同一件事:换个进制写,同一个数就变得好读。表里的换算结果同样是页面现场算的。
| 场景 | 你看到的写法 | 它是几进制 | 换算结果 | 为什么用这个进制 |
|---|---|---|---|---|
| Linux 文件权限 chmod 755 | 755 | 八进制 | 111101101 | 一位八进制正好等于三位二进制,对应读写执行三个权限位 |
| 网页颜色 #FF5733 的红色通道 | ff | 十六进制 | 255 | 一个通道占一个字节,两位十六进制刚好覆盖 0 到 255 |
| 子网掩码 255.255.255.0 的一段 | 255 | 十进制 | 11111111 | 数二进制里连续 1 的个数,就是掩码位数 /24 的来历 |
| 短链接 ID / 订单号 | 1000000 | 十进制转 36 进制 | lfls | 用满 0-9 与 a-z,同一个数字的位数更短、更好念 |
常用数值进制对照表:开发里反复出现的数
这张表把开发里反复出现的那些数一次列全,四列分别是十进制、二进制、八进制、十六进制。 表里每一行的二/八/十六三列都是页面现场用 BigInt 算出来的, 和上面转换器用的是同一份代码,所以不存在「正文抄错一位」这回事。
| 十进制 | 二进制 | 八进制 | 十六进制 | 这个数为什么常见 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 零,在任何进制里都写作 0 |
| 1 | 1 | 1 | 1 | 一,在任何进制里都写作 1 |
| 2 | 10 | 2 | 2 | 二进制里第一次进位 |
| 3 | 11 | 3 | 3 | 两位二进制全 1 |
| 4 | 100 | 4 | 4 | 2 的 2 次方 |
| 5 | 101 | 5 | 5 | 常见于示例,二进制 101 |
| 6 | 110 | 6 | 6 | 二进制 110,八进制里的一位 |
| 7 | 111 | 7 | 7 | 三位二进制全 1,八进制的最大一位数字 |
| 8 | 1000 | 10 | 8 | 一个字节的位数,2 的 3 次方 |
| 9 | 1001 | 11 | 9 | 十进制的最大一位数字 |
| 10 | 1010 | 12 | a | 十六进制里写作 a,字母数字的第一个 |
| 11 | 1011 | 13 | b | 十六进制 b |
| 12 | 1100 | 14 | c | 十六进制 c,一打的数量 |
| 13 | 1101 | 15 | d | 十六进制 d |
| 14 | 1110 | 16 | e | 十六进制 e |
| 15 | 1111 | 17 | f | 十六进制 f,四位二进制全 1 |
| 16 | 10000 | 20 | 10 | 十六进制的基数,2 的 4 次方 |
| 31 | 11111 | 37 | 1f | 五位二进制全 1,月份最大天数 |
| 32 | 100000 | 40 | 20 | 2 的 5 次方,常见的位宽 |
| 63 | 111111 | 77 | 3f | 六位二进制全 1 |
| 64 | 1000000 | 100 | 40 | 2 的 6 次方,常见的位宽与块大小 |
| 100 | 1100100 | 144 | 64 | 十进制的一百,十六进制是 64(别和 0x100 搞混) |
| 127 | 1111111 | 177 | 7f | 8 位有符号数的最大值,也是 ASCII 的最大码位 |
| 128 | 10000000 | 200 | 80 | 2 的 7 次方,ASCII 之外的起点 |
| 255 | 11111111 | 377 | ff | 一个字节能表示的最大无符号数,十六进制 ff |
| 256 | 100000000 | 400 | 100 | 一个字节的取值个数,2 的 8 次方 |
| 511 | 111111111 | 777 | 1ff | 九位二进制全 1,八进制 777 |
| 512 | 1000000000 | 1000 | 200 | 2 的 9 次方,常见扇区大小 |
| 1000 | 1111101000 | 1750 | 3e8 | 十进制的一千,注意它不是 1 KiB |
| 1023 | 1111111111 | 1777 | 3ff | 十位二进制全 1 |
| 1024 | 10000000000 | 2000 | 400 | 1 KiB,2 的 10 次方 |
| 4095 | 111111111111 | 7777 | fff | 十二位二进制全 1,十六进制 fff |
| 4096 | 1000000000000 | 10000 | 1000 | 2 的 12 次方,常见页大小 4 KiB |
| 65535 | 1111111111111111 | 177777 | ffff | 16 位无符号上限,端口号的最大值 |
| 65536 | 10000000000000000 | 200000 | 10000 | 2 的 16 次方,也是 Unicode 基本多文种平面的大小 |
| 16777215 | 111111111111111111111111 | 77777777 | ffffff | #FFFFFF,24 位真彩色的颜色总数减一 |
| 2147483647 | 1111111111111111111111111111111 | 17777777777 | 7fffffff | 32 位有符号上限,2038 年问题的主角 |
| 4294967295 | 11111111111111111111111111111111 | 37777777777 | ffffffff | 32 位无符号上限,IPv4 地址总数减一 |
| 9007199254740991 | 11111111111111111111111111111111111111111111111111111 | 377777777777777777 | 1fffffffffffff | JavaScript 的 Number.MAX_SAFE_INTEGER,超过它浮点就开始丢精度 |
| 9223372036854775807 | 111111111111111111111111111111111111111111111111111111111111111 | 777777777777777777777 | 7fffffffffffffff | 64 位有符号上限,Java 的 Long.MAX_VALUE |
| 18446744073709551615 | 1111111111111111111111111111111111111111111111111111111111111111 | 1777777777777777777777 | ffffffffffffffff | 64 位无符号上限,2 的 64 次方减一 |
最值得记住的是这几组——255 的十六进制、1024 的二进制这两条被查得最多:255 = ff = 一个字节的上限,65535 = ffff = 两个字节,4294967295 = ffffffff = 四个字节。看到一串 f 就能立刻反应出「这是几个字节全满」, 读内存 dump 和排查溢出时会省很多事。
进制转换是怎么算的:进制转换手算步骤,一个例子讲完三件事
下面用同一个数 156 走完全部三种算法。手里有本页的「手算步骤」面板时, 这三段可以对着看。
除基取余法:十进制转二进制怎么算
把这个数反复除以目标进制的基数,记下每次的余数,除到商为 0,最后把余数从下往上读出来。转二进制就是:156÷2=78 余 0,78÷2=39 余 0,39÷2=19 余 1,19÷2=9 余 1,9÷2=4 余 1,4÷2=2 余 0,2÷2=1 余 0,1÷2=0 余 1。从下往上读得 10011100。转十六进制只要两步:156÷16=9 余 12(写作 c),9÷16=0 余 9, 从下往上读得 9c。
按权展开法:二进制怎么转回十进制
二进制怎么读?从右往左数,第 n 位代表 2 的 n 次方,把值为 1 的那几位权值加起来就是十进制—— 这就是按权展开法:每一位乘以「基数的位置次方」再相加。10011100 展开就是 1×2⁷ + 0×2⁶ + 0×2⁵ + 1×2⁴ + 1×2³ + 1×2² + 0×2¹ + 0×2⁰ = 128 + 16 + 8 + 4 = 156。十六进制同理:9c = 9×16¹ + 12×16⁰ = 144 + 12 = 156。这一步也是最好的验算方式, 本页的手算步骤面板会把两个方向都列出来。
分组捷径:二进制怎么快速转十六进制
二进制转八进制、十六进制不用回十进制绕一圈:从右往左每 3 位一组直接得八进制,每 4 位一组直接得十六进制。10011100 按 3 位分组是 010 011 100 → 234; 按 4 位分组是 1001 1100 → 9c。所以 156 = 0b10011100 = 0o234 = 0x9C,一个例子把三件事讲完了。
小数进制转换:为什么小数会转不尽、循环节哪来的
一个小数在目标进制下能不能写完,只取决于一件事:把它写成最简分数后,分母的每个质因数是不是都能整除目标进制的基数。 能整除就有限,只要有一个不能整除就必然无限循环。反过来,二进制小数转十进制永远写得完 ——十进制的基数 10 里含着质因数 2,所以 0.101(二进制)精确等于 0.625。
| 小数 | 最简分数 | 分母的质因数 | 目标进制 | 结果 |
|---|---|---|---|---|
| 0.5(十进制) | 1/2 | 2 | 二进制(基数 2) | 0.1 |
| 0.1(十进制) | 1/10 | 2 和 5 | 二进制(基数 2,没有 5) | 0.0(0011) |
| 0.1(十进制) | 1/10 | 2 和 5 | 十六进制(基数 16 = 2⁴,还是没有 5) | 0.1(9) |
| 0.2(十进制) | 1/5 | 5 | 二进制 | 0.(0011) |
| 0.1(三进制) | 1/3 | 3 | 十进制(基数 10,没有 3) | 0.(3) |
| 0.1(二进制) | 1/2 | 2 | 十进制(10 含质因数 2) | 0.5 |
这就是浮点数那个经典问题的根源:计算机存的是 0.0(0011) 这个无限循环小数 被截断后的近似值,所以 0.1 + 0.2 算出来是 0.30000000000000004。 本页把括号里的循环节直接标给你看,还会写明循环节长度; 如果在你设定的位数内没找到循环节,会明确说「未在 N 位内检测到循环节,已按 N 位截断」, 绝不给一个看起来精确的答案。
负数和补码怎么算:位模式相同,解读不同
负数有两种完全不同的写法,本页把它们分开选,因为它们回答的是两个问题。数学负号回答「这个数是多少」,-156 的十六进制就是 -9c;定宽补码回答「计算机内存里到底存了哪几位」,这时候没有负号,只有 0 和 1。
负数二进制补码的算法是「取反加一」。以 8 位下的 -5 为例:先写出 5 的二进制 00000101,按位取反得 11111010,再加 1 得 11111011,也就是十六进制 fb。关键在于同一串 11111011,按无符号读是 251、按有符号读是 -5——位模式完全相同,只是解读方式不同。本页的位视图会把两种读法并排给你—— 这种有符号无符号转换只是换个读法,位一个都没动。
| 位宽 | 常见类型名 | 有符号范围 | 无符号范围 |
|---|---|---|---|
| 8 位 | int8_t / byte / u8 | -128 ~ 127 | 0 ~ 255 |
| 16 位 | int16_t / short / u16 | -32768 ~ 32767 | 0 ~ 65535 |
| 32 位 | int / int32 / u32 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
| 64 位 | long / int64 / JS BigInt | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
| 128 位 | int128 / UUID 的位宽 | -170141183460469231731687303715884105728 ~ 170141183460469231731687303715884105727 | 0 ~ 340282366920938463463374607431768211455 |
把「负数怎么看」切成定宽补码,本页就是一个补码在线转换面板:位宽下拉覆盖 8 位 16 位 32 位补码,再往上还有 64、128 位。位宽决定范围,超出范围就是溢出。-129 放不进 8 位有符号数,本页会明确报「超出 8 位补码范围」并让你自己决定换更大位宽还是接受截断,绝不悄悄截断给你一个错数。 另外注意 255 这种情况:它在 8 位无符号里合法,在 8 位有符号里放不下, 页面会同时告诉你两种读法各是多少。位视图下方还给了大端小端字节序两种排列, 调试网络协议和二进制文件时经常要看这个。
Base64 是 64 进制吗?不是,编码和数制是两回事
这是本页最常被问到的一个问题,答案很干脆:不是。 名字里都有 base,做的事完全不同。
| 维度 | 进制转换(本页) | Base64 / Base32 / Base58 编码 |
|---|---|---|
| 处理对象 | 一个数值 | 一串字节 |
| 原理 | 按权展开,逢 N 进一 | 把字节流按固定位宽重新切分再查表 |
| 保序吗 | 保序,9c 比 9b 大 1,可比大小可做算术 | 不保序,两个 Base64 串比大小没有意义 |
| 有填充吗 | 没有 | Base64 有 = 填充,长度必须是 4 的倍数 |
| 字母表统一吗 | 统一,就是 0-9 a-z | 各家不同,URL 安全变体、Base58 各有各的表 |
| 前导零 | 会被吃掉(0056 就是 56) | 会保留,因为它处理的是字节不是数值 |
一句话记法:进制转换换的是「同一个数的写法」,编码换的是「同一串字节的写法」。 要把图片、文件或任意二进制内容变成一串可粘贴的字符,用「Base64 编码解码」; 要把一个数字在二进制和十六进制之间换算,用本页。Base32、Base58 同理,都是编码不是数制, 所以本页刻意不做它们——混在一起只会让人更糊涂。
进制转换为什么我的结果和别的工具不一样
| 你看到的 | 原因与做法 |
|---|---|
| 大数结果对不上 | 对方用 parseInt 或浮点数,超过 9007199254740991 就静默丢精度。本页全程 BigInt,9007199254740993 的十六进制是 20000000000001,不是 …000。 |
| 010 被当成了 8 | C 语言和旧版 JavaScript 里 0 开头是八进制字面量。本页按十进制处理并给提示,需要八进制请手动把源进制选成 8。 |
| 小数位数不一样 | 对方默认截几位通常不说。本页要么标出循环节,要么写明截断位数,还能切「末位四舍五入」。 |
| 负数结果不同 | 你要的是数学负号还是定宽补码?两种口径在页面上分开选,位宽不同结果也不同。 |
| 十六进制大小写不同 | 只是显示风格,数值完全相同。用「字母用大写」开关切换即可。 |
| 结果里有空格 | 那是分组显示(二进制习惯 4 位一组)。用「复制纯数字」拿到不含分组符的版本,贴进代码不会报错。 |
| Excel 列号 AA 对不上 | Excel 列号是「双射 26 进制」,A=1、Z=26、AA=27,没有数字 0,和标准 26 进制不是一回事。本页 26 进制里的 aa 等于 10×26+10,也就是 270。 |
英文语境下这类工具通常叫 base converter online 或 radix converter,搜 binary to decimal、decimal to binary、hex to decimal、decimal to hex、twos complement converter、base 36 converter 找到的都是同一件事;本页整数走 BigInt,也就是英文里说的 bigint base converter。 要把十六进制哈希值和另一个值比对请用「校验值比对」,要把 U+4E2D 这种码点转成字符请用 「Unicode 转换」,要把一串十进制时间戳转成日期请用「时间戳转换」—— 本页只负责数值在不同进制之间的写法,不越界替你做另外三件事。