c程序语言1和2的区别,C笔记01-C简介与补码

所学视频及PPT截图来源:爱课程资源共享课

计算机及程序语言发展

0.计算机的体系结构

fc85e8e90617e08178f3499c4da37f25.png

1.计算机语言的发展历程

机器码阶段

1d6af9cd968ede176bf66706dbcc30c0.png

汇编阶段

d36e5a21e02b2267cee21287bed104be.png

高级语言阶段

c06206ea0f4129a1421632b4ff07acc4.png

2.高级语言

高级语言分类

06fb2c447a9e6058549898640c4eb440.png

cbdf510055c429d86a80349777caf36c.png

3.C语言标准

ddfc22ef03e327a69f1715d67ae230c9.png

4.C语言的应用

014bb57da55ea09951a7790def65ad21.png

计算机中数的存储

人类自然认知的数:十进制数

计算机中存储的数:二进制(硬件上好实现)

1.二进制数

9362ce3b5873acfca2b5b49bbb72a5de.png

2.正负数的二进制表示与双零问题

014a1250e74c253bf4d265bce9e28c43.png

3.补码的引入

51ef6710a6dbcca9b4829f03ae2dbd2b.png

双零问题的解决

5b4ce8e3af7c27d0fffb5a6d00a308f4.png

补充知识:补码的原理

1.怎么看待"运算"?

计算机的视角:0/1序列的逻辑运算.没有什么无符号或有符号的概念和区别,也没有什么加减乘除法的概念,一切都是0/1序列,一切操作都是逻辑运算而已.

人类的视角:用逻辑电路对计算进行判断和控制,使得它表现出我们想要或我们能理解的内涵与信息.

由此,引申出两个概念:

机器数:从计算机的角度看待的一个值

真值:机器数所表示的内涵与信息,从人类角度看待的一个值

举例:-6在计算机中的表示码为11010(假设计算机用于表示数的位数为5位)

机器数:1×24+1×23+0×22+1×21+0×20=26

真值:最高位为符号位,是个负数.剩余码1010,进行反补码的操作,得到0110,化为十进制为-6

2.源码,反码,补码的机器数与真值

44883483e25234b00646d92315261c17.png

3.补码的优势

解决了双零问题

符号位可以参与运算,大大简化了硬件电路的实现

4.定点补码计算法则及其证明(为什么可以用补码表示数和进行计算)

计算法则 : 在不溢出情况下, [X]补+[Y]补=[X+Y]补 (溢出:结果超出编码所能表示的数的范围)

设计算机补码的位数为M.且x=|X|,y=|Y|

溢出的情况:

0 < x <2M-1

0 < y <2M-1

两正相加时: x+y >= 2M-1(两正相加,向符号位进位)

两负相加时: x+y >2M-1(两负相加,非符号位之和不足以向符号位进位)

(1)情况1:两正数相加正向溢出

(2)情况2:两负数相加反向溢出

不溢出的情况:

0 < x <= 2M-1

0 < y <= 2M-1

两正相加时: x+y < 2M-1(两正相加,不向符号位进位)

两负相加时: x+y >= 2M-1(两负相加,非符号位之和足以向符号位进位)

(3)情况3:正数相加不溢出

等式左边:

[X]补+[Y]补=x+y

等式右边:

[X+Y]补=x+y

左边等于右边,等式成立

(3)情况4:负数相不溢出

等式左边:

[X]补+[Y]补=2M+2M-(x+y)

(注:第一个2M是负数符号位相加的天然进位,可以舍去),所以左边的最终结果为: 2M-(x+y)

等式右边:

[X+Y]补=2M-(x+y)

左边等于右边,等式成立

(4)正负相加绝不会溢出

0 < x <= 2M-1

0 < y <= 2M-1

则根据不等式,可推出:

-2M-1 < x-y < 2M-1,即: 0 <= |x-y| < 2M-1.

因此,正负数相加的结果也可以被表示,绝不会溢出.

我们假设X为正,Y为负:

等式左边:

[X]补+[Y]补 = x+2M-y = 2M-(y-x) = 2M+(x-y)

当x>=y时,左边 = 2M+(x-y) = x-y(注:2M相当于符号位向更高位的进位,而符号位本身就是最高位,故可以舍去)

当x

等式右边:

当X+Y>=0时,x>=y,[X+Y]补= x-y

当X+Y<0时,x

左边等于右边,等式成立

(5)两操作数之中至少有一个为0的情况: 显然,等式是成立的.

综上所述: 在不溢出的情况下,[X]补+[Y]补=[X+Y]补成立.

5.补码运算原理

化减法为加法的原理: (钟表模型)

147940aa026f3e137d3b3a298a628e75.png

最高位参与运算的原理:

(1)非负数相加,不溢出的情况下,最高位均为0,相加亦为0.

(2)两负数相加,最高位均为1,相加进位变为0;而在不溢出的情况下,两负数的非符号部分的和会产生进位,成为新的符号位.

(3)一正一负相加,例如: (正数X与负数Y)

[X]补+[Y]补=x+2M-y

当x>y,也就是结果为正时,为便于理解,上式可变为 2M+(x-y) ,其中的2M为符号位的进位,舍去.结果即为: x-y .怎么理解呢?就是当x-y>0时,两数的非符号部分的和会向符号位进位,与符号位的1相加又会进位,使得符号位为0,代表正值.

当x0时,两数的非符号部分的和不足以向符号位进位,所以符号位相加为1,代表负值.

6.注意事项与说明:

所谓的最高位(MSB),也就是符号位参与运算仅仅是指补码之间进行加法运算时而言.原码,反码,补码的码种之间的互相转换时,符号位是保持不变,不参与变换和运算的.

正因为上面的规定,所以关于编码10000…0000有一个问题,那就是当它作为补码时,它是没有原码或反码的.因为,在不动用符号位的情况下,它是没有办法完成减1这样的操作,也无法求得其原码与反码.一般用它来代表编码所能代表的负数的下限值.

对于上述的特殊补码:

任何负数补码与之相加,溢出

任何整数与之相加,变为负数(因为负数下限值的绝对值大于正数上限值的绝对值),但运算正确不会出错

因此,上述特殊补码也是适用补码运算规则的,可以参与运算而不出错.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值