IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言—原 |反 |补码的真正机制 -> 正文阅读

[C++知识库]C语言—原 |反 |补码的真正机制

近来频频接触原反补码,书上的解释是什么呢?
计算机内部在用补码进行计算,正数的原反补都是其本身,负数的补码是除符号位之外全部取反,补码是在反码的基础上加1。如果真正想要去进一步他们之间的关系,其实这个定义可以细分为更多几个小问题。
1.反码存在的意义是什么?
首先,我们需要知道的是,我们现在假设的是,两个八位的带符号的数字的运算。现在假设为3+5,也就是0 0000011+ 0 0000101。现在是两个正数在进行运算,我们输给计算机的是3和5,计算机内部得到的命令是两个正数,那么直接进行相加,0 0000011+ 0 0000101=0 0001000,也就是我们看到的结果8。
很好,如果是只进行正数之间的运算我们甚至完全不需要知道有什么反码,补码的定义。
但是,现在问题来了,如果是3-5呢?很遗憾的是计算机内部并没有减法电路,减法电路设计起来难度也不大为什么不要呢?那计算机就不能算减法了吗?那显然不可能。
于是,我们的反码就出现了。它可以在没有减法器的情况下把3-5认为是3+(-5)。比如-5的补码是1 11111011,3+(-5)也就是0 0000011+1 11111011=111111110,-2。
2.补码存在的意义是什么?
那其实这个时候又会出现一个问题,既然反码已经解决了,计算机没有减法器的问题,为什么还要有补码这种东西的存在呢?
如果我们现在看一个八位的含符号数的话,你会发现我们按照数字构成的规则会出现两个0,一个正0,一个负0。显然这种情况是不允许存在的,计算机内部只能允许有一个0的存在,那怎么办呢,我们规定将负数那一侧的数字全部都移一位,那么那么原来的负0也就变成了-1。所以也就有我们所看见的负数区域变成了-128—-1。
3.计算机内部具体是怎么进行计算的?
还是拿刚刚的例子,其实这里最容易让人混乱的就是,比如我们在读111111111的时候,会按照它是原码去读,如果是原码11111111也就是-127,但是通常情况下我们把它叫做-1,不是-127,如果拿正数那块的构成标准来认识的话,也就是我们人的标准,其实它就是-127,但是我们现在是在让机器进行计算,机器是要把把11111111的反码再加1认为是-127的,也就是10000001是-127。
简单来说,一个值11111111,它本来是-127,机器要求把它的反码加1设定为-127,所以它变成了,10000000,又变成了10000001,所以10000001变成了我们约定俗成的-127。
还有就是10000000,这里我们一看原码,-0(其实已经不存在这个值了),反码加1,11111111再加1,看起来是无法计算了,这也从侧面印证了,我的计算机内部设计上是将0—-127移了一位的。
简而言之,1000000这个时候就是-128的计算机内部的补码,不需要再验证了,我们可以认为已经人为规定。
其实到这个地方就可以停下来了,再深究下去,需要结合计算机内部构造去梳理。学疏,文浅,有错望涵。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:28:13  更:2021-07-25 11:30:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 0:14:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码