计算机基础知识(一)

本章目录

1.什么是位(bit),字节(Byte),字(word),字长?

2.有符号数和无符号数。

3.机器码,真值,原码,反码,补码

4.原码反码补码的转换

5.计算机中为什么要以补码形式参与运算或存储?

6.什么是逻辑移位?什么是算术移位?

7.溢出

8.计算机对溢出的处理[待补充]

9.溢出的判断方法

10.什么是符号位拓展,原码,反码,补码数值是否发生变化?

1.什么是位(bit),字节(Byte),字(word),字长?

位(bit)
数据存储的最小单位。在计算机中的二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit)。
计算机中的CPU位数指的是CPU一次能处理的最大位数。如8位CPU,一次只能处理一个8位的数据或者8位的指令。32位计算机的CPU一个周期可以处理32位数据或8位的指令。

字节(Byte)
Byte简称B,也就是字节,每个字节由8个位(bit)组成,是计算机存储信息的最基本的单位一个汉字由两个字节组成。字母和数字由一个字节组成
除了字节之外还有其他单位,从小到大依次是:字节(B),千字节(KB),兆字节(MB),千兆字节(GB),千千兆字节(TB),转换关系为:
1TB = 1024GB
1GB = 1021MB
1MB = 1024KB
1KB = 1024Byte
数据存储以字节(Byte)为单位,数据传输大多以位(bit)为单位

字(word)
在计算机中,一串数码作为一个整体来处理或运算的,称为计算机字,简称字。字通常分为若干个字节(每个字节一般是8位)。在存储器中,通常每个单元存储一个字。对于不同位数的计算机,字的大小往往不同。如对32位计算机和64位计算机:
32位计算机:1字=4字节=32位
64位计算机:1字=8字节=64位

字长
计算机的每个字所包含的位数(bit)称为字长计算机的字长是指它一次可处理的二进制数的数目。一般地,大型计算机的字长为32~64位,小型计算机为12~32位,微型计算机为4~16位。字长是衡量计算机性能的一个重要因素。

2. 有符号数和无符号数

无符号数(unsigned number):指的是整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。
其中无符号数的取值范围为:0~2n-1。

有符号数(signed number):一般用最高有效位(MSB)来表示数的符号,正数用0表示,负数用1表示。
有符号数(补码表示)的取值范围是:-2n-1~2n-1-1

有符号数中:

最小值为:1000_0000_0000_0000_0000_0000_0000_0000_B(-231D)

最大值为:0111_1111_1111_1111_1111_1111_1111_1111_B(231-1D)

0表示为:0000_0000_0000_0000_0000_0000_0000_0000_B

-1表示为:1111_1111_1111_1111_1111_1111_1111_1111_B(FFFF_FFFF_H)

注:无论是有符号数还是无符号数,它的二进制表示肯定都是唯一的。

3. 机器码,真值,原码,反码,补码

机器码
一个数在计算机中的二进制表示形式,叫做这个数的机器码机器码是带符号的在计算机中用一个数的最高位存放符号位正数为0负数为1

如十进制中的数1,假如计算机字长为8位,转换成二进制就是0000_0001;如果是-1,机器码为1000_0001(原码)。那么0000_0001,1000_0001就是机器码。机器码包含原码,反码和补码三种表示形式

真值

将带符号位的机器数所表示的真正的数值称为机器数的真值,也就是该机器码代表的真正的数值。因为有符号数最高为表示的符号位,所以其值并不等于其代表的值(将其解读为无符号数)。

如-1的机器码为1000_0001(原码),1111_1110(反码),1111_1111(补码),如果将最高位不解读为符号位,那么它们分别代表的无符号数十进制数129(无符号数),254(无符号数),255(无符号数)。其中-1为1000_0001(原码),1111_1110(反码),1111_1111(补码)的真值。简单理解就是有符号的真值(实际代表的数)需要按照一定的转换规则(是按原码,反码还是补码进行解码)将机器码进行解析得到,如果转换规则不同,则得到的数值可能不是真值。

原码

最高位表示符号位,其余位表示该数的绝对值。简而言之是最高位符号位+该数值的绝对值。

用原码表示数,可见有两个0:
+0:0000_0000_0000_0000_0000_0000_0000_0000_B

-0:1000_0000_0000_0000_0000_0000_0000_0000_B

231-1D(0111_1111_1111_1111_1111_1111_1111_1111_B)为正负分界线

绝对值相等的正数负数除去最高位,其他位均相同。

反码

正数的反码是其本身负数的反码为符号位为1,其余位是在其原码的基础上各位取反

相比与原码,用反码表示数,正数部分没有变化,负数部分相比原码表示头尾颠倒(因为对其数值位进行取反)。

对二进制数取反与代表数值求补数(余数)的关系[待补充]???

补码
正数的补码是其本身负数的补码符号位为1,其余位补码是在原码的基础上,各位取反,然后+1得到

下面给出4bit数值的原码,反码,补码对照表:

十进制数 原码 反码 补码
0 0000 0000 0000
+1 0001 0001 0001
+2 0010 0010 0010
+3 0011 0011 0011
+4 0100 0100 0100
+5 0101 0101 0101
+6 0110 0110 0110
+7 0111 0111 0111
-1 1001 1110 1111
-2 1010 1101 1110
-3 1011 1100 1101
-4 1100 1011 1100
-5 1101 1010 1011
-6 1110 1001 1010
-7 1111 1000 1001
-8 1000 1111 1000

4. 原码反码补码的转换

由于正数的原码,反码,补码均相同,所以以下各转换均分为正数和负数的情况进行讨论。

原码反码转换

原码转换为反码

正数的原码就是其反码。

负数的反码为其原码符号位保持不变(1),其余为取反得到。

例:-1的原码为1000_0001_B,求其反码?

最高位保持不变其余位取反得到反码为1111_1110_B。

反码原码转换

正数的反码就是其原码。

负数的反码可以使用逆向运算,符号位不变,其余位取反。

例:-1的反码为1111_1110_B,求其原码?

符号位保持不变(1),其余位取反得到原码1000_0001_B。

原码补码转换

原码转换为补码

正数的补码和它的原码相同。

负数的补码是将原码的符号位保持不变(1),其余位取反,然后+1,得到其补码。

例:求-1的补码?

-1的原码为1000_0001_B,符号位保持不变,其余位取反得到1111_1110_B,然后+1,得到补码1111_1111_B。

补码转换原码

如果补码的符号位为0,表示的是一个正数,其原码就是补码。

如果补码的符号位为1,表示的是一个负数。有两种求补码的方式。

A. 补码的补码就是要求补码的原码。

B. 逆向运算,将补码-1,再将符号位保持不变(1),其余位取反得到的就是该补码的原码。

例:-1的补码为1111_1111b_B,求其原码?

按A方法:求-1补码的补码。符号为不变,其余位取反得到1000_0000_B,再将其+1得到原码为1000_0001_B。

按B方法:逆向运算,-1的补码先减1得到1111_1110_B,再将其符号位保持不变,其余为取反得到1000_0001_B。

特殊的,对于-256,补码为1000_0000_B,按第二中情形求原码,符号位不变,其余位-1,反码应为1111_1111_B,可以理解为向高位借1,但最高为符号位的值仍然是1而不是0。对其余位进行取反得到-256的原码为1000_0000_B。按照第一种情形来计算原码,即补码的补码是其原码,最高位保持不变,其余位取反得到1111_1111_B,再将其+1(有进位,最高位为符号位保持不变1,进位舍去),得到-256的原码为1000_0000_B。(以上是自己的理解,可能不是标准解释,因为-256的补码由-0得到,所以-256的补码是特殊情况,补码和原码可以不使用此转换规则进行转换,进行特殊情形进行记忆)

反码补码转换

反码转换为补码

正数的反码与补码相同。

负数的反码+1就是其补码。

补码转换为反码

正数的补码与原码相同。

负数的补码-1就是其反码。特别的,对于-8的补码为(1000b)转换为原码时。符号位不变,-1得(1111b)。

即出现000需要-1的情形,各位取反的到111,符号位需保持不变为1。

注:二进制数在内存中是以补码的形式存放的。

5. 计算机中为什么要以补码形式参与运算或存储?

CPU是由运算器,寄存器,总线构成。运算器简而言之就是一个个小的开关构成的集成器,每一个开关的状态代表0和1,每一次运算都是由时钟脉冲将这些状态带出来或存储在寄存器中。对于一个有符号的真值转换成机器码做运算,如果让计算机集成器中一个个小开关取保存这些状态,每个集成器上还要预留一个开关做为正负,并且其余开关进行转换的过程还要兼顾符号开关的状态,运算过程较为繁琐。解决方法是,能不能将真值中的符号位直接参与到运算中,这样就可以不用在硬件中专门预留一个符号开关标志。根据运算法则,减去一个正数等于加上一个负数,如1-1=1+(-1)=0,所以计算机可以只有加法而没有减法,这样计算机的运行的设计就变得简单了。

如计算十进制数1-1=0,以下分别给出原码,反码,补码计算过程。

原码计算

1-1=1+(-1)=[0000_0001]原+[1000_0001]原=[1000_0010]原=-2

如果用原码表示,让符号位也参与计算,对于减法而言,结果是不正确的

反码计算

1-1=1+(-1)=[0000_0001]反+[1111_1110]反=[1111_1111]反=[1000_0000]原=-0

发现用反码计算减法,结果的真值部分是正确的问题出现在0这个特殊的数值上,用反码编码会出现+0[0000_0000]反和-0[1000_0000]反,但是-0是没有任何意义的

补码计算

1-1=1+(-1)=[0000_0001]补+[1111_1111]补=[0000_0000]补=[0000_0000]原=0(溢出的高位丢弃)

使用补码的编码方式,0的补码为[0000_0000],反码中-0不存在了,[1000_0000]补表示的是-128。注意:实际上使用-0的补码来表示-128,所以-128并没有原码和反码的表示。(对-128的补码表示[1000_0000]计算出来的原码是[0000_0000],这是不正确的)

6. 什么是逻辑移位?什么是算术移位?

移位运算

移位运算是将数值向左向右移动,对于十进制来说就是实现放大10倍和缩小10倍的效果,对于二进制来说就是放大2倍和缩小2倍的效果。

逻辑移位
对于逻辑移位,就是不考虑符号位,移位的结果是数据所有的位数进行移位。根据移位操作的目的,左移时,舍弃高位,低位补0;右移时,舍弃低位,高位补0。例:
0101_0101 >> 3 = 0000_1010
0110_1011 >> 3 = 0000_1101

因逻辑右移不考虑符号位,假如一个负值进行逻辑右移,则会出现变成正值的情况。例:
1000_0101 >> 1 = 0101_0010(正值)

算术移位
算术移位是考虑数据的符号位,所以不能直接移动所有的位数,分为有符号型值和无符号型值。

无符号数据:算术移位等同于逻辑移位

有符号数据:算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1

7. 溢出

由于整数在内存里保存在一个固定长度的空间内,它能存储的最大值和最小值是固定的如果我们尝试去存储一个数,而这个数又大于这个固定的最大值时,就会导致整数的溢出

以下讨论发生溢出的情形

计算机中说的溢出(OF)一般是指补码模式的加减运算的条件下。补码模式有几个计算,转化规则:

-[X] = [-X]
+[Y] = [+Y]
-[-[X]] = [X]

加减运算的可能组合有以下情形:
对加法来说:

[正] + [正]
[正] + [负]
[负] + [正]
[负] + [负]

对减法来说:

[正] - [正]        相当与[正] + [负]
[正] - [负]       相当于[正] + [正]
[负] - [正]       相当于[负] + [负]
[负] - [负]       相当于[负] + [正]

可见所有减法都可找到对应的加法情形,那么就只看加法

对于一个有N为的二进制补码,其能表示的数字范围是:-2(N-1) ~ +2(N-1)-1
负数:-2(N-1)~-1
正数:1~2(N-1)-1
**对于加法来说,[正]+[负]或者[负]+[正]的情形永远都不会发生溢出,不管两个操作数取值多少,结果都落在有效范围内。**而超出有效范围的两种可能性就是:

[正] + [正]
[负] + [负]

定义两个事件
最高有效位进位:对于N位补码,第N-1位发生了进位
符号位进位:对于N位补码,第N位符号位发生了进位
定义4个边界值,以8位有效字长为例:
最大正值127D 0111_1111_B
最小正值1D 0000_0001_B
最小负值-128D 1000_0000_B
最大负值-1D 1111_1111_B

列出所有组合

情形 符号位 最高有效位 是否发生溢出 最高有效位进位 符号位进位
[最小正] + [最小正] 00 00 N N N
[最小正] + [最大正] 00 01 Y Y N
[最小正] + [最小负] 01 00 N N N
[最小正] + [最大负] 01 01 N Y Y
[最大正] + [最大正] 00 11 Y Y N
[最大正] + [最小负] 01 10 N N N
[最大正] + [最大负] 01 11 N Y Y
[最小负] + [最小负] 11 00 Y N Y
[最小负] + [最大负] 11 10 Y N Y
[最大负] + [最大负] 11 11 N Y Y

结论:如果发生溢出操作,则最高有效位进位和符号位进位必然一个Y另一个是N。如果未发生溢出,则必然是两个全Y或者全N。这就是根据最高有效位和符号位发生进位异或来判断是否溢出的规律

8. 计算机对溢出的处理[待补充]

回绕
无符号数会回绕,对于unsigned整型溢出,C的规范是有定义的,溢出后的数会以2^(8*sizeof(type))作模运算,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模
截断
将一个较大宽度的数存入一个宽度小的操作数中,高位发生截断

9. 溢出的判断方法

双符号位补码法
对有符号的补码进行计算
如果计算结果前两位是00,结果就是正数。
如果计算结果前两位是11,结果就是负数。
如果计算结果前两位是01,就是正溢出。
如果计算结果前两位是10,就是负溢出。

单符号位法
最高有效位有进位,符号位无进位→正溢出
最高有效位无进位,符号位有进位→负溢出

10. 什么是符号位拓展,原码,反码,补码数值是否发生变化?

符号位拓展是指计算机对应于小字节转化为大字节的规则

负数:当扩展一个负数的时候,需要将拓展的高位全赋1。

正数:对于正数而言,符号为拓展和零扩展是一样的,因为符号位就是0,即全填充0。

需要注意:负数拓展后,还是负数,且值不变;正数拓展后还是正数,值不变

原码,反码,补码进行符号位拓展后真值情况讨论

正数:由于正数原码,反码,补码相等,所以对于正数进行符号位拓展(高位补0),拓展后的原码,反码,补码真值均不变。

负数:对于负数,原码,反码,补码不相等,所以对于负数进行符号位拓展(高位补1),拓展后只有补码真值不变,原码,补码真值均改变。

结论机器码是由补码的形式存储才能保证正/负数进行符号位拓展真值不改变

参考文献:
https://blog.csdn.net/cg2258911936/article/details/103574604
https://blog.csdn.net/Xzg_2017/article/details/80158215
https://www.zhihu.com/question/22199029?sort=created
https://blog.csdn.net/qq_43511405/article/details/105899254
https://blog.csdn.net/weixin_42550185/article/details/117524464
https://blog.csdn.net/m0_58857034/article/details/121733387
https://blog.csdn.net/li0978/article/details/100714867
https://blog.csdn.net/m0_51402475/article/details/124809921

计算机基础知识(一)相关推荐

  1. 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf

    <计算机基础知识>实验教学改革探讨.pdf Science& TechnologyVision 科 技 视 界 科技 探·索·争鸣 计<算机基础知识>实验教学改革探讨 ...

  2. 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...

    文档介绍: 计算机基础知识+ Word基础知识+ Excel基础知识 第一部分 一.单项选择题 1.世界上第一台电子数字计算机取名为(    ). A.UNIVAC    B.EDSAC    C.E ...

  3. java 前端基础知识_【计算机·知识】关于前端的计算机基础知识

    原标题:[计算机·知识]关于前端的计算机基础知识 作为一个刚刚入门的程序猿,你是否对专业知识有足够的了解?今天新闻君带你走进前端的世界. 前端的语言接触起来相对于后端的语言要容易不少,但前端的语言也有 ...

  4. 第一代电子计算机诞生的国家是( ),计算机基础知识习题.doc

    计算机基础知识习题.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机基础知识题计算机的诞生:第一台电子计算机是1946 ...

  5. 华南理工计算机基础知识题,华南理工_计算机应用基础_随堂练习答案(2017年)

    华南理工_计算机应用基础_随堂练习答案(2017年) (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 . . . .华南理工-计算 ...

  6. 计算机基础知识_2020年河北省高职单招计算机基础知识和实践技能培训

    本考纲是根据教育部2014年4月中华人民共和国教育部<中等职业学校专业教学标准(试行)>(教职成厅函[2014]11号)颁布的<中等职业学校计算机应用专业教学标准>.<中 ...

  7. 计算机基本知识培训稿,计算机基础知识培训稿.doc

    计算机基础知识培训稿 计算机基础知识认识电脑 1.主机:是电脑最主要的设备,相当于人的大脑一样,几乎所有的文件资料和信息都由它控制,您需要电脑完成的工作也都由它主要负责,它还要给其他的电脑设备分配工作 ...

  8. 计算机基础知识精品课程,计算机应用基础精品课

    本精品课为校级精品课.<计算机应用基础>是我院所有各专业必须的公共基础课,直接关系到各专业人才培养的基本规格要求,即要求毕业生能熟练掌握计算机应用技能,培养和提高学生的计算机文化素质,为学 ...

  9. 打印机没有反应计算机管理,计算机基础知识:如何解决打印机没有反应的问题(二)...

    [导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考! 1.在打印机无法正常工作时,我们需要检 ...

  10. 计算机基础知识同步训练,计算机应用基础:全国高等教育自学考试同步辅导/同步训练(非计算机专业公共基础课)最新版...

    本书结构及显著特点: 1.本书以自学考试大纲规定的考核知识点及能力层次为线索,按考试大纲规定的考核知识点及能力层次要求为线索分章辅导,将该章中的所有知识点按统考的各种题型编写在同步练习中,同时配有参考 ...

最新文章

  1. 你应该知道的五种IO模型
  2. 音频处理中频域转时域的恢复
  3. Windows Server 2012 R2 文件服务器配置共享
  4. 手游linux服务器时间同步问题
  5. BZOJ 4212: 神牛的养成计划
  6. 首次使用计算机鼠标键盘不能用,解决方案:如何解决无法使用计算机鼠标和键盘的问题?如果启动后无法使用鼠标和键盘该怎么办?...
  7. Chrome——我的Chrome插件
  8. [java进阶]3.slf4j作用及其实现原理
  9. 联想服务器网卡型号怎么看,如何通过设备硬件ID判断无线网卡的品牌及型号
  10. bootstrapTable基础操作
  11. hdu1257 最少拦截系统【想了好久】
  12. vue之vue-router跳转
  13. 蠕虫病毒往往是通过进入计算机系统,2012年甘肃省三职生计算机考试题
  14. python测试嵌入式_用Python测试嵌入式系统的测试框架
  15. spring mvc 解决后台传递值乱码问题
  16. java swing餐厅订餐系统
  17. 银联证书下载及导出流程
  18. 无损检测技术之医用超声基础
  19. 第7章第25节:双图排版:两张图片横竖交错叠加排版 [PowerPoint精美幻灯片实战教程]
  20. 结合量价持仓分析的股指期货日内交易策略

热门文章

  1. hiti打印机android驱动,诚研Prinhome P461驱动
  2. HDU1847Good Luck in CET-4 Everybody!递推求解必胜、必败点 附三种经典博弈
  3. DigestUtils加密工具类
  4. 计算机4个数字游戏怎么玩,网络回合制游戏怎么玩 神武4电脑版属于回合制吗
  5. 如何删除表中的重复记录?
  6. 【TO B 乱谈】这次我们不割韭菜,只谈区块链
  7. 那些常见的并发模型相关知识
  8. PLC控制电机正转5秒停2秒反转5秒停2秒循环3次梯形图(博图v18)
  9. java计算机毕业设计中小学教务管理平台源码+mysql数据库+系统+部署+lw文档
  10. 泛物云计算机,「博纳云」博纳云(BonusCloud):全球泛载雾计算平台