首页 > 工具箱 > 进制计算器

进制计算器

两个操作数各自指定进制,算完四种进制一起给。用 BigInt 算整数,不受 JavaScript 双精度 53 位的限制;位运算按你选的位宽在补码上做,溢出、截断的效果和 C 里一样。只做进制转换用 进制转换 更顺手。

原码 / 反码 / 补码

输一个十进制整数,看它在定长机器字里三种编码分别长什么样。计算机实际存的是补码——这样加减法能用同一套电路,而且 0 只有一种表示。

格雷码与 BCD 码

格雷码相邻两个数只差一位,编码器、状态机跨时钟域用它可以避免多位同时翻转读出中间值。BCD 用四位二进制表示一位十进制数,老式数码管、实时钟芯片和一些金融格式里还在用。

几件容易搞混的事

右移分算术和逻辑两种
算术右移(这里用的)保留符号位,负数右移还是负数,对应 C 里有符号数的 >>;逻辑右移高位补 0,对应无符号数,JavaScript 里写作 >>>。把负数当无符号右移是经典 bug。
位宽不是摆设
位运算和补码都在你选的位宽上做。0xFF & 0x100 在 8 位下是 0,在 32 位下还是 0——但 ~0 在 8 位下是 0xFF(-1),在 32 位下是 0xFFFFFFFF(也是 -1),打印成十六进制就完全不同。
JavaScript 的位运算只有 32 位
原生 & | ^ << >> 会先把操作数转成 32 位有符号整数,超过 2³¹−1 就出错。这页用 BigInt 自己实现,所以 64 位是真的 64 位。
取余对负数的符号
C、Java、JavaScript 的 % 结果跟被除数同号-7 % 3 = -1),Python 的 % 跟除数同号(-7 % 3 = 2)。这里按前一种。
相关工具
进制转换大数计算科学计算器字符转 16 进制校验码计算