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

第一天

学习计算机原码、反码和补码的日记

今天花了半天学习计算机里的原码、反码和补码

首先得从基础概念入手,机器数和真值是绕不开的。机器数就是数字在计算机里的二进制形式,最高位是符号位,0代表正数,1代表负数,比如+3是00000011,-3是10000011。而真值就是机器数对应的真实数值,像10000011的真值是-3,不是它表面换算的131,这一步理解了,后面的编码才好展开。

接着就是核心的原码、反码、补码。原码最简单,符号位加真值绝对值,8位二进制里+1是00000001,-1是10000001,取值范围是[-127,127],人脑一看就懂,但计算机用它做减法会出问题。反码呢,正数和原码一样,负数是原码符号位不变、其余位取反,-1的反码是11111110,可它表示负数时没法直观读值,还会出现+0和-0两个编码,还是不够完美。

最后是补码,这才是计算机真正在用的。正数补码和原码相同,负数补码是原码符号位不变、其余位取反后加1,-1的补码是11111111。它解决了反码的0编码问题,让0只有00000000一种表示,还能多表示一个-128,8位二进制取值范围变成了[-128,127],32位int类型就是[-2³¹,2³¹-1],这一点之前一直没搞明白,今天终于通了。

最关键的是弄清楚为什么要用反码和补码。原来计算机设计时,想让运算更简单,只保留加法就好,因为减法可以转化成加负数。但原码直接算减法会出错,比如1-1用原码算会得到-2;反码算减法结果真值对了,却有两个0;补码完美解决了这些问题,1-1用补码算正好得0,符号位也能参与运算,不用额外设计识别符号的电路。

为了理解背后的数学原理,我还查了同余的概念。就像钟表,回拨2小时和往前拨10小时结果一样,因为它们关于模12同余。计算机里的反码、补码其实也是利用了同余,反码是对能表示的最大值取模,补码则是在此基础上加1,相当于增大了模的值,让运算结果总能落在正确的取值范围内。

不过数学证明部分还是有点绕,尤其是负数取模的计算,反复算了好几遍才明白。可能还有理解不到位的地方,以后遇到问题再慢慢琢磨吧。

http://www.hskmm.com/?act=detail&tid=13686

相关文章:

  • (1-10-2)MyBatis 进阶篇 - 教程
  • 联想拯救者无法登录当前账户
  • WPF二合一平板电脑上屏幕旋转时获取屏幕宽高问题
  • 代码中的善意:构建人性化的软件开发文化
  • 超级恶心的题面 [USACO21OPEN] Portals G
  • 如何隐藏一个元素
  • 昆仑通态触摸屏保存参数到内部存储器并读取的方法成都控制器开发提供
  • helloword
  • 使用reCAPTCHA提升WordPress网站安全性 - 指南
  • 软工9.22
  • 在控制台执行可列出所有placeholder样式
  • 今日总结
  • 9/22
  • 对于一门古老东欧玄学的初步研究的简要报告
  • Codeforces 2127 D(图论,组合数学,DFS,分类讨论)
  • Java学习笔记:从三个实验看编程思维的锤炼
  • 题解:AT_arc068_d [ARC068F] Solitaire
  • Codeforces Round 1051 (Div. 2) D1D2题解
  • JSP
  • 每日博客
  • 探展打卡 Serverless,2025 云栖大会来了
  • 从 0 到 1,AI 走进服装店:记住每位顾客的喜好,比你还靠谱
  • STM32HAL 飞快入门(十九):UART 编程(二)—— 中断方式实现收发及局限分析
  • 贪心算法应用:多重背包启发式疑问详解
  • 划重点|云栖大会「AI 原生应用架构论坛」看点梳理
  • 君子如水,心中有火:vivo本心而为30周年
  • Margin 塌陷问题如何解决?触发BFC。BFC的概念和触发条件
  • 9.22
  • 数字统计
  • 火速收藏!2025 云栖大会 AI 中间件议程看点全公开(附免费报名通道)