源码、反码和补码
对于有符号数而言, 原码就是一个数的二进制表示. 二进制的最高位是符号位, 0 表示正数, 1 表示负数. 比如 56 是十进制, 转为二进制就是 00111000, 于是 56 的原码就是 00111000, 左边第一位 0 是符号位, 后面的其他数字是数据位.
计算机用数的原码进行显示, 数的计算和存储是用补码进行的.
用原码对正数进行计算是不会有什么问题的.
正数的原码, 反码和补码都一样, 即正数三码合一.
负数的原码就是绝对值的原码的最高位的 0 改为 1. 比如 56 是十进制, 转为二进制就是 00111000, 于是 56 的原码就是 00111000, 于是 -56 的原码就是 10111000.
负数的反码的计算方式: 原码的符号位不变, 其他位取反, 即 1 变成 0, 0 变成 1.
负数的补码的计算方式: 反码加 1. 因此负数的反码等于补码减 1. 即:
负数的补码 = 反码 + 1
负数的反码 = 补码 - 1
0 的反码和补码都是 0.
一个字节是 8 位, 即 8 个 bit. 一个字节的数字, 最大是 01111111, 转为十进制为 127. 最小值为 11111111, 转为十进制为 -127.
反码是为了解决原码不能计算负数的问题而出现的. 负数计算的时候, 如果结果不跨 0, 是没有任何问题的, 但是如果结果跨 0, 则计算结果和实际结果有 1 的偏差.
补码是为了解决反码在负数计算时跨 0 的问题而出现的. 补码还能多记录一个特殊的值, 即 -128. -128 在一字节下没有原码和反码.
一般都是先根据一个数写出它的二进制表示, 即得到原码, 然后从原码得到反码, 再从反码得到补码. 最后用补码进行计算, 计算结果是补码, 再将这个结果转化为反码, 再将反码转化为原码, 最后输出原码. 即:
一个数 → 原码 (二进制表示) → 反码 → 补码 → 进行计算 → 补码 → 反码 → 原码
计算得到补码时, 如果补码的最高位为 0, 说明是正数, 则反码和原码也都和补码相等 (三码合一) .
-128 没有原码和反码, 只有补码.


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术