c++第八课 运算原理

本文详细介绍了c++运算原理,包括寄存器的概念和分类,以及运算器的工作原理。讲解了减法运算如何通过与非逻辑运算实现,并探讨了乘法和除法的本质。内容深入浅出,帮助理解计算机内部的运算过程。

c++教程总目录

第一课:c++第一课 输出“Hello word”
第二课:c++第二课 输出自定义字符图形
第三课:c++第三课 关于代码的一些知识
第四课:c++第四课 定义int型变量、变量赋值与输出
第五课:c++第五课 输入
第六课:c++第六课 c++语言常用类型
第七课:c++第七课 加法算数运算
第八课:c++第八课 运算原理
未完待续……

c++第八课 运算原理

这节课的内容可能相当无聊,但也相当有意思。我们来讨论一下电脑内部的运算原理。
可能有一部分读者:学原理干什么?
答:下节课你不会。
继续问:那下节课不学不行吗?
答:可以,你就没法深入,后面的课程会有一定的影响。
再问:遇到就跳过去不行吗?
答:可以。那你可以直接跳到第十课开始看了!

寄存器

电脑内部,不管是什么,都会有寄存器。
寄存器可分为读入寄存器和移位寄存器。每类都有4位寄存器、8位寄存器、16位寄存器。
除了这些,还有组合式32位寄存器、组合式64位寄存器。通常电脑中都是8位移位寄存器。
在电脑中,只有0和1两种状态。0代表低电平,1代表高电平。当然这些就是题外话了。
那么,在电脑中就是二进制的天下。
好,刚才我们说电脑里全是8位移位寄存器,那么8位,也就是8位二进制数。打开计算器,切换程序员模式,切换成二进制,输入8个1:
在这里插入图片描述
点击十进制:
在这里插入图片描述
可以发现是255。很巧,是我们char类型的数据范围!
也就是说,一个8位移位寄存器可以存储一个char类型的变量。
好了,既然char类型的数据范围是0~255,那每一个数是什么呢?告诉大家一个表,叫做ASCII码表:
在这里插入图片描述
我是从百度上复制的,有些不清楚,好奇的朋友可以搜一搜,以后我们还要接触。

把计算器切换至科学模式,输入2^8:
在这里插入图片描述
结果如下:
在这里插入图片描述
可以发现,和我们的char类型数据范围就差1。
我们刚才算的是2的8次方。
等等!
刚才我们提到的是8位移位寄存器!
每一位可以表示两个数:0、1,这就是2的意思。
8就是8位。

好,unsigned int的数据范围是0~4294967297。
这正是2的32次方+1!
也就是说unsigned int和int型的一个变量需要占用4个8位寄存器!
仅仅一个变量啊!要是1000个变量呢?
定义100000000个long long型变量也在范围内,那寄存器的个数……
没事,不麻烦,我们算一算:
一个long long型变量占用2的64次方。
64/8=8(个)
8*100000000=800000000=8(亿个)

所以能想明白电脑里有多少寄存器了吧?
与寄存器比比,那些网络模块、键盘、鼠标……都是弟弟!
要是一个寄存器出问题……

8亿个寄存器还是婴儿。你要是有兴趣,可以算算1GB有多少寄存器构成,不过1GB的U盘就是白捡应该你也不想捡,那你算一算,你那个小小U盘里有多少寄存器!

好了,存储我们弄明白了,下面看运算!

运算器

存储完了,就要运算。计算机本来就是运算的,不是存数据的。
数字电路里有与门、或门、非门、与非门、或非门、同或门、异或门。这些都属于TTL门。
计算机里的运算结构只有与非门。所以计算机只会“加法”。
那减法怎么办?乘法?除法?
一个一个解决。
计算机里有三个码,即原码、反码、补码。也就是说,你只要定义一个char型变量,就会有3个寄存器为你工作!好,那你现在算一算你U盘里有多少寄存器?
原码就是数据本身的值。反码就是最前面一位二进制数为1,表示负数。那负数的反码的二进制代码中最高位就是0。补码就是原码加一。

1.减法

先说减法。
算数有两个量,让两个正整数相减,比如1-1=0,也可以写成:
1+(-1)=0
对吧?
所以减法就是第一个数的原码通过与非逻辑运算加上第二个数的反码。
很晕!
什么是与非逻辑运算?

2.与非逻辑运算

每个寄存器都对应着一套与非逻辑运算器。每套与逻辑运算器由若干个与非门组成。那“若干个”是几个呢?根据你的类型。比如你定义了char型变量,那么与非门的个数就是8个。int型就是256个。
那什么是与非逻辑运算?
比如让两个二进制编码:
10101010
00100100
进行与非逻辑运算:
10001110
然后处理进位,最终结果:
11001110
我们转换成十进制,第一个数是:
170
第二个数:
36
加起来等于:
206
把得数11001110转换成十进制:
206!
那如果让:
11111111
11111111
相加呢?
溢出!
明白之前的数据乱码或为0了吗?

回到减法。
现在减法与加法一样了,不就是加上第二个数的相反数吗?

乘法不就是连加吗?
除法不就是乘法、减法的结合吗?归根结底不还是加法吗?

这样看来发明运算器的工程师很是聪明呢!

由于作者水平有限,文章中难免有误,请大神们给出指正!

上一课:c++第七课 加法算数运算

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值