计算机原码反码补码

简介: 又把原码、反码、补码忘了,这里再来分析一下

一.机器数和真值


1.机器数

一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

比如,十进制中的数 +3 ,如果计算机字长为4位,转换成二进制就是0011。如果是 -3 ,就是 1011 。

2.真值

二进制对应的真值,就是带上符号的二进制

比如: 3对应的真值是+0011。-3对应的真值是-0011


二.原码

原码就是字节第一位是标志位,0代表正,1代表负,剩下位的真值的绝对值

比如8位字节:1的原码 0000 0001,-1的原码 1000 0001


三.反码

  • 正数反码和原码相同
  • 负数反码是原码除标志位之外,按位取反
  • -1的原码 1000 0001
  • -1的反码 1111 1110


四.补码

  • 正数原码、反码、补码相同
  • 负数补码是反码+1,符号位不变(如果超过了字节长度,会发生溢出)
  • -1的原码 1000 0001
  • -1的反码 1111 1110
  • -1的补码 1111 1111


五.计算使用补码计算,而不使用原码、反码计算

  • 让计算机来辨别符号位,会使基础电路设计的超级复杂,那么人们就开始研究让符号位不参与运算的方法
  • 我们知道 1 - 1 = 1+(-1),只设计加法比较简单,人们开始探索加法,并尝试只保留加法,于是计算机减法就变成了加法。

原码的错误

  • 如果使用原码计算 2 + (-1) = 0000 0010 + 1000 0001 = 1000 0011 = -3.这样会出错
  • 为了解决这个问题,出现了反码
  • 反码运算规则是符号位参与运算。同时符号位如果进位,会加到最低位,是循环进位。比如 11 + 10 = 10 (1是符号位)

image.png

  • 2 + (-1) = (0000 0010 + 1111 1110)反  =  0000 0001 = 1

反码的问题

  • 但是还会出现一个问题 +0 和 -0 的问题 +0 = 0000 000 ,-0 = 1111 1111。对计算机来说一个数字只能对应一个机器数,否则会在运算的时候出现错误。于是为了解决这个错误,出现了补码
  • 补码: 补码的符号位一样可以参与运算,但是符号位进位会略去,不会循环
  • 我们这样设定,0对应的是+0。所以0的编码是0000 0000
  • 那么-0就不能表示0,人们就把-0 ~ - 127 整体向后偏移了1位,变成了 -1 ~ -128.至于怎么偏移,就是补码+1 变成反码。
  • 然后我们可以顺着推,1111 1111 是 -1 。那么-128 就是 1000 000了。
  • 至此解决了+0,-0的问题,而且int8的数据范围多了1个,变成了 -128 ~ 127
  • -128 -1 = 127

image.png

  • 这样,数据范围多了一个,而且又解决了问题,所以现在编程使用的都是反码表。8位字节范围是-128 ~ 127
  • 如果使用原码表或反码表  1111 1111 ~ 0111 1111, 范围是 -127 ~ 127
相关文章
|
机器学习/深度学习 人工智能 运维
AI辅助的运维风险预测:智能运维新时代
AI辅助的运维风险预测:智能运维新时代
561 19
AI辅助的运维风险预测:智能运维新时代
|
存储 关系型数据库 MySQL
MySQL数据类型详解及实例应用
MySQL数据类型详解及实例应用
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry系统盘测评IOPS、IO读写和时延性能参数
阿里云ESSD Entry云盘是新一代企业级云盘,具备高IOPS、低延迟特性,适合开发与测试场景。它提供10~32,768 GiB容量范围,最大IOPS达6,000,吞吐量150 MB/s,时延1~3 ms。支持按量付费和包年包月,性价比高,特别适合个人开发者和中小企业。详情及价格参考阿里云官网。
|
自然语言处理 机器人 开发者
大模型的综合分析报告
- **性能**:所提及的模型在性能上均表现出色,特别是在语言生成和理解方面。参数规模较大的模型(如DeepSeek-LLM-67B-Chat、Yi-1.5-9B-Chat等)通常能提供更为丰富的语言处理能力。 - **显存**:显存需求因模型参数规模而异,但一般较大规模的模型需要较高配置的硬件支持。 - **生态**:Llama、GLM等模型在开源社区中较为受欢迎,拥有一定的用户基础和生态支持。其他模型可能处于发展初期,生态支持有待加强。 - **更新频率和时间**:具体更新频率可能因开发者团队和模型版本而异。但一般而言,开源模型可能会不断更新以改进性能和功能。 - **效果评估**:在对话
|
Ubuntu Linux iOS开发
问题./configure: error: the HTTP gzip module requires the zlib library.处理
问题./configure: error: the HTTP gzip module requires the zlib library.处理
2465 6
|
弹性计算 编解码 Kubernetes
什么是云XX产品?提防虚假噱头产品
随着云计算技术的普及,企业和个人用户纷纷选择云产品。然而,市场上存在许多虚假的“云”产品,令人难以辨别。本文介绍了云产品的核心特性,如弹性伸缩、按需付费、高可用性和管理自动化,并提供了如何避免被虚假产品误导的建议。选择知名云服务商、了解核心特性和阅读服务等级协议是关键。
482 2
|
Java
SpringBoot 内部方法调用,事务不起作用的原因及解决办法
在做业务开发时,遇到了一个事务不起作用的问题。大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问题得到解决,记录下来分享给大家。
865 4
|
Web App开发 Dubbo 关系型数据库
Soul网关接入与验证
Soul网关接入与验证
336 0
Soul网关接入与验证
解决VSCode中Debug和运行路径不一致的
在VSCode调试时,如果程序运行路径不正确,可通过配置`launch.json`文件的`CWD`参数来解决。在`launch.json`中添加或修改`configurations`,例如设置`"cwd": "${fileDirname}"`,确保调试和运行时路径一致。这样可以避免因路径问题影响调试。记得`"name"`、`"type"`、`"request"`等其他关键参数也要正确配置。我是木头左,希望对你有所帮助!
解决VSCode中Debug和运行路径不一致的
|
存储 缓存 前端开发
react hooks 全攻略
react hooks 全攻略
392 0

热门文章

最新文章