当前位置: 首页 > news >正文

如何理解有符号数在计算机中用​​补码​​存储

文章目录

    • ​**​🚗 汽车里程表模型(8位补码)​**​
      • ​**​规则 1:正数就是正常数字​**​
      • ​**​规则 2:负数 = “从最大值倒着走”​**​
    • ​**​🔢 补码的运算:减法变加法​**​
      • ​**​例子:计算 `7 - 5`​**​
    • ​**​❓ 为什么补码这么设计?​**​
      • ​**​1. 减法变加法(CPU 省事!)​**​
      • ​**​2. 零只有一种表示(不浪费!)​**​
      • ​**​3. 溢出自动处理(像钟表一样循环)​**​
    • ​**​🎯 补码速记口诀​**​
      • ​**​实战练习​**​
    • ​**​🤔 还不明白?打个比方!​**​
    • ​**​✅ 终极总结​**​

​🚗 汽车里程表模型(8位补码)​

假设你有一辆老式汽车,它的里程表只有 ​​3 位数​​(最大显示 999,最小 000)。
现在,我们用它来理解 ​​8位补码​​(因为 8 位二进制的最大值是 255,类似 999)。

​规则 1:正数就是正常数字​

  • +5 → 直接显示 005(二进制 00000101
  • +127 → 显示 127(二进制 01111111

​规则 2:负数 = “从最大值倒着走”​

  • 比如 -5
    • 先找到 999(最大值)
    • 然后往回走 5 步 → 999 - 5 = 994
    • 所以 -5 在里程表上显示 994(二进制 11111011

​关键点​​:

  • ​负数 = 最大值 + 1 - 绝对值​
    • 8 位二进制:-5 = 256 - 5 = 251(二进制 11111011
  • ​计算机用同样的方式存储负数!​

​🔢 补码的运算:减法变加法​

​例子:计算 7 - 5

  1. ​找到 -5 的补码​​:
    • -5 = 256 - 5 = 251(二进制 11111011
  2. ​计算 7 + (-5)​:
    • 7 = 00000111

    • -5 = 11111011

    • 相加:

        00000111 (7)  
      + 11111011 (-5)  
      ------------  
      100000010 (2)  
      
    • ​丢弃第9位​​(就像里程表超过 999 会归零),剩下 000000102)→ ​​结果正确!​


​❓ 为什么补码这么设计?​

​1. 减法变加法(CPU 省事!)​

  • 计算机​​最怕减法​​,但加法很容易。
  • 补码让 A - B 变成 A + (-B),​​CPU 只要一个加法器就能搞定所有运算!​

​2. 零只有一种表示(不浪费!)​

  • 原码有 +000000000)和 -010000000),但补码只有 00000000
  • -0 的补码还是 00000000​,不会混淆!

​3. 溢出自动处理(像钟表一样循环)​

  • 比如 127 + 1
    • 01111111 (127) + 1 = 10000000 (-128)
    • ​就像钟表从 12:59 跳到 1:00,很自然!​

​🎯 补码速记口诀​

​“正数直接存,负数取反加1,减法变加法!”​

​实战练习​

  1. -3 的 8 位补码是多少?​

    • 先写 +300000011
    • 取反:11111100
    • 加1:11111101(这就是 -3 的补码!)
  2. ​计算 10 - 3(用补码)​

    • 10 = 00001010

    • -3 = 11111101

    • 相加:

      00001010 (10)  
      +11111101 (-3)  
      ------------  
      100000111 (7)  
      
    • 丢弃第9位 → 000001117),​​结果正确!​


​🤔 还不明白?打个比方!​

想象你在玩 ​​《超级马里奥》​​,屏幕最右边是 255,最左边是 0

  • ​正数​​:马里奥向右走(0 → 1 → 2 → ... → 127
  • ​负数​​:马里奥向左走(-1 = 255-2 = 254,…,-128 = 128
  • ​如果走到尽头​​(比如 127 + 1),就会从 -128 重新开始!

​补码的本质就是:用“绕圈”的方式表示负数!​


​✅ 终极总结​

问题补码的解决方案例子(8位)
​怎么存负数?​取反加1-5 = ~5 + 1 = 11111011
​怎么算减法?​用加法代替7 - 5 = 7 + 251 = 2
​零有几个?​唯一一个00000000
​溢出怎么办?​自动循环127 + 1 = -128

​现在你懂了吗?如果还有问题,直接问我!​​ 😊

http://www.lryc.cn/news/602945.html

相关文章:

  • 阿里给AI To C战略戴上眼镜
  • 案例开发 - 日程管理 - 第三期
  • Android Handler 完全指南
  • 【QT搭建opencv环境】
  • 商城系统-项目测试
  • redis未授权getshell四种方式
  • Ubuntu24安装MariaDB/MySQL后不知道root密码如何解决
  • 基于STM32设计的智慧果园云监测系统_256
  • 基于Uniapp及Spring Boot的奢侈品二手交易平台的设计与实现/基于微信小程序的二手交易系统
  • linux安装zsh,oh-my-zsh,配置zsh主题及插件的方法
  • 机器学习基础-numpy
  • OpenMP 并行编程核心机制详解:从变量作用域到同步优化
  • SwinTransformer改进(14):集成MLCA注意力机制的Swin Transformer模型
  • Linux DNS解析2 -- 网关DNS代理的作用
  • 如何实现安卓端与苹果端互通的多种方案
  • unisS5800XP-G交换机配置命令之端口篇
  • 【安卓笔记】OOM与内存优化
  • React Router v6 核心组件
  • Linux进程概念(五)进程地址空间
  • 吃透 lambda 表达式(匿名函数)
  • 关闭 UniGetUI 自动 Pip 更新,有效避免 Anaconda 环境冲突教程
  • 3.DRF视图和路由
  • sqlite3学习---基础知识、增删改查和排序和限制、打开执行关闭函数
  • SpringBoot数学实例:高等数学实战
  • (二)Eshop(RabbitMQ手动)
  • 【计算机网络】OSI七层模型
  • Qt项目中使用 FieldManager 实现多进程间的字段数据管理
  • EXCEL怎么使用数据透视表批量生成工作表
  • 十七、K8s 可观测性:全链路追踪
  • django 按照外键排序