反码计算器
翻转二进制数的每一位,或根据十进制整数计算固定位宽的反码。
计算反码
选择二进制或十进制输入,然后将每一位的零变为一、一变为零。
关于反码
二进制数的反码通过翻转每一位得到:每个零变为一,每个一变为零。此操作也称为按位取反或逻辑非。虽然手工操作很简单,但它广泛应用于计算机体系结构、数字电子技术、网络协议及有符号二进制运算的学习。本计算器保留二进制输入的长度,让前导零和预期寄存器位宽在结果中清晰可见。
将十进制整数转换后再取反时,位宽很重要。十进制值 42 的最短二进制形式是 101010,但在八位寄存器中会存储为 00101010。翻转全部八位后得到 11010101,按无符号数解释时为 213。不同位宽会产生不同的位模式,因为新增的前导零会变成前导一。因此,选择十进制模式时,本工具要求指定位宽,范围为 1 到 32,并拒绝无法用该数量无符号位表示的数值。
在早期计算机中,反码也是一种有符号数表示法。正数使用普通二进制表示,负数则通过翻转对应正数的各位得到。该系统有两种零:全零表示正零,全一表示负零。现代处理器大多改用补码,因为补码只有一个零,并能简化算术电路。不过,反码运算在互联网校验和中仍很重要:各字以循环进位方式相加,最后再将总和取反。
不要混淆反码和补码。补码是在固定位宽内对反码加一得到的。两者表示的负值不同,这在底层软件调试中尤为重要。本计算器只执行直接的逐位翻转,显示得到的位序列及其无符号十进制值。它适合核对作业、设计位掩码、学习逻辑门及确认固定位宽转换,无需手动检查每一位。
对于二进制输入,请输入需要取反的确切序列。对于十进制输入,请选择足以容纳原数的位数。结果面板会显示补零后的原始位序列、取反序列和无符号十进制值,便于立即核对每个阶段。
反码示例
| 输入 | 输出 | 说明 |
|---|---|---|
| 二进制 1010 | 0101 | 四个位上的数字均被翻转。 |
| 二进制 00001111 | 11110000 | 前导零的位置保留,并变为一。 |
| 十进制 42,8 位 | 11010101 (213) | 42 在取反前先补零为 00101010。 |
如何计算反码
- 已有位序列时选择“二进制输入”,需要转换时选择“十进制输入”。
- 输入二进制序列或非负十进制整数。
- 对于十进制输入,选择足以容纳该数值的位宽。
- 点击“计算反码”,查看补零后的输入、取反位序列和十进制结果。
反码常见问题
如何求二进制数的反码?
将每个零替换为一,每个一替换为零。保持位数不变,以保留原始位宽。
为什么位宽会改变十进制模式的结果?
前导零属于固定位宽二进制表示的一部分,取反后会变为一。因此,同一个十进制值的八位取反结果与十六位取反结果不同。
反码和补码相同吗?
不同。补码是在所选位宽内对反码加一,而反码只翻转各位。
反码运算中的负零是什么?
在早期有符号反码表示法中,全一的位模式表示负零,全零表示正零。这也是现代计算机大多采用补码的原因之一。
反码运算仍用于哪些场景?
它用于 IPv4、TCP 和 UDP 等协议的校验和。计算时将固定位宽的字以循环进位方式相加,然后将最终总和取反。