C语言学习之路--计算机系统组成以及工作原理,进制之间的转换和机器数及其表示范围
目录
- 一、前言
- 二、计算机系统组成以及工作原理简介
- 1、硬件系统基本组成原理及工作原理
- 2、硬件各部分详解
- 1、运算器
- 2、控制器
- CPU
- 3、存储器
- 1、内存储器
- 2、外存储器
- 3、拓展
- 4、存储器工作原理
- 4、输入设备
- 5、输出设备
- 3、软件系统的组成及分类
- 1、系统软件
- 2、应用软件
- 4、硬件与软件的关系
- (1)硬件和软件互相依存。
- (2)硬件和软件无严格界线
- (3)硬件和软件协同发展。
- 三、进位计数制及其转换
- 1、二进制数转换为十进制
- 2、十进制数转化为二进制
- 1、整数部分转换
- 2、小数部分转换
- 3、十进制转换为八进制,十六进制
- 1、整数部分
- 2、小数部分
- 4、二进制数,八进制数和十六进制数之间的转换
- 1、二进制数转化为八进制数
- 2、八进制数转化为二进制数
- 3、二进制数转换为十六进制数
- 4、十六进制数转化为二进制数
- 四、二进制的加减乘除
- 五、机器数的表示形式及其表示范围
- 1、真值与机器数
- 2、数的原码表示
- 1、整数
- 2、定点小数
- 3、总结
- 3、数的反码表示
- 1、整数
- 2、定点小数
- 3、总结
- 4、数的补码表示
- 1、整数
- 2、定点小数
- 3、总结
- 5、用一字节表示数
- 6、数在机器中的表示形式
- 7、补码的加、减运算
- 8、无符号整数
- 9、字符表示法
- 六、二进制数的位运算
- 1、逻辑变量
- 2、“与”运算
- 3、“或”运算
- 4、“非”运算
- 5、“异或”运算
- 6、例题
- 七、总结
一、前言
- 本人是一名小白,这一篇是记录我C语言学习中的计算机系统组成以及工作原理,进制之间的转换和机器数及其表示范围的所学所得,仅为简单的认识下C语言中的各个知识。
二、计算机系统组成以及工作原理简介
- 计算机是以逻辑部件为物质基础,能够对信息进行自动处理的机器。逻辑部件其实就是指计算机的硬件系统,而对信息的自动处理则是由计算机的软件系统来实现的。
- “系统”,我们曾在高中生物课程中了解到它是指由若干相互独立而又相互联系的部分所组成的整体,从这个方面来说,计算机系统是由硬件系统和软件系统组成。
- 分类如下图所示
1、硬件系统基本组成原理及工作原理
- 硬件是构成计算机的物理装置,看得见,摸得着,是一些实实在在的有形实体。随着时代的发展,半个多世纪以来,出现了各种类型的计算机,但是他们的基本结构是相同的。
- 现在所使用的计算机硬件系统的结构一直沿用了由美籍数学家冯 · 诺伊曼提出的模型,它是由运算器,控制器,存储器,输入设备和输出设备五大功能部件组成。
- 计算机内部采用二进制来表示程序和数据。
- 硬件系统基本组成原理及工作原理如下图所示
2、硬件各部分详解
1、运算器
- 运算器(Arithmetic Logic Unit,ALU)又称算术逻辑单元,计算机中执行各种算术运算和逻辑运算操作的部件,后者常被忽视,但恰恰是逻辑运算使计算机能进行因果关系分析。一般运算器都具有逻辑运算能力。算术运算是指加、减、乘、除及它们的复合运算。而逻辑运算是指“与”、“或”、“非”等逻辑比较,逻辑判断和“移位”,“比较”,“传送”等等操作。在计算机中,任何复杂运算都转化为基本的算术与逻辑运算,然后在运算器中完成。
2、控制器
- 控制器(Controller)是指按照预定顺序改变主电路或控制电路的接线和改变电路中电阻值来控制电动机的启动、调速、制动和反向的主令装置。由程序计数器、指令寄存器、指令译码器、时序产生器和操作控制器组成,它是发布命令的“决策机构”,即完成协调和指挥整个计算机系统的操作。
- 控制器是计算机的指挥系统,计算机的工作就是在控制器控制下有条不紊协调工作的。控制器通过地址访问存储器,逐条取出选中单元的指令,分析指令,根据指令产生相应的控制信号作用于其它各个部件,控制其它部件完成指令要求的操作。上述过程周而复始,保证了计算机能自动、连续地工作。
CPU
- 一般把运算器和控制器做在一块集成电路芯片上,称为中央处理器,简称为CPU(Central Processing Unit)。它是计算机核心和关键,计算机的性能主要取决于CPU。它控制了计算机的运算、处理、输入和输出等工作。
3、存储器
- 存储器(Mmory)是计算机中具有记忆能力的部件,用来存放程序或数据。程序和数据是两种不同的信息,应放在不同的地方,两者不可混淆 。指令总是送到控制器,而数据则总是送到运算器。存储器就是一种能根据地址接收或提供指令或数据的装置。
- 存储器可分为两大类,即内存储器和外存储器。
1、内存储器
- 内存储器简称内存,又称主存,是CPU能根据地址线直接寻址的存储空间,是计算机内部存放数据的硬件设备,是程序和数据存储的基本要素,由半导体器件制成。内存中存放数据是以相应的内存单元为单位进行存放的,内存单元的大小可以是一个字节,也可以是多个字节,每个内存单元都有一个编号,它表示该内存单元所对应的内存地址。内存的特点是存取速度快,基本上能与CPU速度相匹配。
2、外存储器
- 外存储器简称外存,它作为一种辅助存储设备,主要用来存放一些暂时不用而又需常期保存的程序或数据。当需要执行外存中的程序或处理外存中的数据时,必须通过CPU输入/输出指令,将其调入内存中才能被CPU执行处理,所以外存实际上属于输入/输出设备。
3、拓展
- 现代计算机系统中广泛应用半导体存储器,从使用功能角度看,半导体存储器可以分成两大类:断电后数据会丢失的易失性(Volatile)存储器和断电后数据不会丢失的非易失性(Non-volatile)存储器。微型计算机中的RAM属于可随机读写的易失性存储器,而ROM属于非易失性(Non-volatile)存储器
4、存储器工作原理
- 为了更好地存放程序和数据,存储器通常被分为许多等长的存储单元,每个单元可以存放一个适当单位的信息。全部存储单元按一定顺序编号,这个编号被称为存储单元的地址,简称地址。存储单元与地址的关系是一一对应的。应注意存储单元的地址和它里面存放的内容完全是两回事。
- 对存储器的操作通常称为访问存储器,访问存储器的方法有两种,一种是选定地址后向存储单元存入数据,被称为“写”;另一种是从选定的存储单元中取出数据,被称为“读”。可见,不论是读还是写,都必须先给出存储单元的地址。来自地址总线的存储器地址由地址译码器译码(转换)后,找到相应的存储单元,由读/写控制电路根据相应的读、写命令来确定对存储器的访问方式,完成读写操作。数据总线则用于传送写入内存或从内存取出的信息。
4、输入设备
- 输入设备(Input Device)向计算机输入数据和程序的部件。是计算机与用户或其他设备通信的桥梁。输入设备是用户和计算机系统之间进行信息交换的主要装置之一。键盘,鼠标,摄像头,扫描仪,光笔,手写输入板,游戏杆,语音输入装置等都属于输入设备。输入设备(InputDevice)是人或外部与计算机进行交互的一种装置,用于把原始数据和处理这些数的程序输入到计算机中。计算机能够接收各种各样的数据,既可以是数值型的数据,也可以是各种非数值型的数据,如图形、图像、声音等都可以通过不同类型的输入设备输入到计算机中,进行存储、处理和输出。
- 常见种类
- 字符输入设备:键盘;
- 光学阅读设备:光学标记阅读机,光学字符阅读机;
- 图形输入设备:鼠标器、操纵杆、光笔;
- 图像输入设备:摄像机、扫描仪、传真机;
- 模拟输入设备:语言模数转换识别系统
5、输出设备
- 输出设备(Output Device)是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作等。也是把各种计算结果数据或信息以数字、字符、图像、声音等形式表现出来。常见的输出设备有显示器、打印机、绘图仪、影像输出系统、语音输出系统、磁记录设备等。
- 通常我们将输入设备和输出设备统称为I/O设备(Input/Output)。它们都属于计算机的外部设备。
3、软件系统的组成及分类
- 软件(software)国标中对软件的定义为:与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。
其它定义:
1.运行时,能够提供所要求功能和性能的指令或计算机程序集合。
2.程序能够满意地处理信息的数据结构。
3.描述程序功能需求以及程序如何操作和使用所要求的文档。
以开发语言作为描述语言,可以认为:软件=程序+数据+文档
1、系统软件
- 系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。另一类是面向用户的软件,如各种语言处理程序(象VC、CB等)、实用程序、字处理程序等。
- 系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。
2、应用软件
- 应用软件是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。如财务报表软件、数据库应用软件等。初学C语言的读者主要任务是学习如何编写应用软件。
4、硬件与软件的关系
(1)硬件和软件互相依存。
- 硬件是软件赖以工作的物质基础,软件的正常工作是硬件发挥作用的惟一途径, 软件是用户与机器的接口。计算机系统必须要配备完善的软件系统才能正常工作,且充分发挥其硬件的各种功能。
(2)硬件和软件无严格界线
- 随着计算机技术的发展,在许多情况下,计算机的某些功能既可以由硬件实现,也可以由软件来实现。因此,硬件与软件在一定意义上说没有绝对严格的界线。
(3)硬件和软件协同发展。
- 计算机软件随着硬件技术的迅速发展而发展,而软件的不断发展与完善又促进硬件的更新,两者密切地交织发展,缺一不可。
三、进位计数制及其转换
- 在现在的日常生活中,数值、文字、声音、图形等各种形式的信息,需要使用计算机加工处理是,必须按一定的法则转换成由“0”和“1”两个符号组合的二进制数。
- 数码:表示数的符号(比如10进制中的0,1,2,3,4,5,6,7,8,9这10个数字符号)
基数:数码的个数(比如10进制就是基数为10)
权 :每一位所具有的值(比如10进制中10^i为该数字的权)
数制 | 十进制数 | 二进制数 | 八进制数 | 十六进制数 |
---|---|---|---|---|
数码 | 0~9 | 0~1 | 0~7 | 0~9,A~F,a~f |
基 | 10 | 2 | 8 | 16 |
权 | 10^i | 2^i | 8^i | 16^i |
表示 | 右下角标注10或D,比如(123.45)10{(123.45)}_{10}(123.45)10 | 右下角标注2或B | 右下角标注8或O,在C语言中在数的前面加0 | 右下角标注16或H,在C语言中数的前面加0X或0x |
特点 | 逢十进一 | 逢二进一 | 逢八进一 | 逢十六进一 |
注意:二进制运算规则简单,便于电路实现,它是数字系统中广泛采用的一种数制。但因用二进制表示一个数时,所用的位数比用十进制数表示的位数多,人们读写很不方便,容易出错,因此常采用八进制或十六进制。 C 语言程序设计中就经常会用到这两种进制。
1、二进制数转换为十进制
- 二进制转换为十进制是比较方便的,只要将二进制数写成按权展开,并将式中各乘积项的积算出来,然后各项相加即可。
- 例如
(11010.101)2{(11010.101)}_{2}(11010.101)2
= 1*24{2}^{4}24 + 1*23{2}^{3}23 + 0*22{2}^{2}22 + 1*21{2}^{1}21+0*20{2}^{0}20+1*2−1{2}^{-1}2−1+0*2−2{2}^{-2}2−2+1*2−3{2}^{-3}2−3
=16+8+2+0.5+0.125
=(26.625)10{(26.625)}_{10}(26.625)10 - 同时,八进制,十六进制转化为十进制也是如此,在此不再举例。
2、十进制数转化为二进制
- 十进制的数转换为二进制,要分为整数部分转换和小数部分转换。下面来举例介绍他们的转换方式。
- 比如说(117.8125)10{(117.8125)}_{10}(117.8125)10转换为二进制数,
1、整数部分转换
(117)10{(117)}_{10}(117)10;
除以2 | 余数 | 所占位 |
---|---|---|
117/2 = 58 | a0{a}_{0}a0=1 | 最低整数位 |
58/2 = 29 | a1{a}_{1}a1=0 | |
29/2 = 14 | a2{a}_{2}a2=1 | |
14/2 = 7 | a3{a}_{3}a3=0 | |
7/2 = 3 | a4{a}_{4}a4=1 | |
3/2 = 1 | a5{a}_{5}a5=1 | |
1/2 = 0 | a6{a}_{6}a6=1 | 最高整数位 |
所以,(117)10{(117)}_{10}(117)10=(1110101)2{(1110101)}_{2}(1110101)2
- 注意,对于整数部分的转换第一次除以2所得到的余数是二进制整数的最低位,最后所得到的余数是二进制数整数的最高位。
2、小数部分转换
- 对于被转换的十进制的小数部分不断乘以基数2,并记下其整数部分,直到结果小数部分为0或达到一定精度为止。
(0.8125)10{(0.8125)}_{10}(0.8125)10;
相乘 | 积的整数部分 | 所占位 |
---|---|---|
0.8125*2 = 1.625 | 1 | 最高小数位 |
0.625*2 = 1.25 | 1 | |
0.25*2 = 0.5 | 0 | |
0.5*2 = 1.0 | 1 | 最低小数位 |
因此,(0.8125)10{(0.8125)}_{10}(0.8125)10=(0.1101)2{(0.1101)}_{2}(0.1101)2
注意:在十进制效的小效鄙分转换中,有时连续乘以2不一定能使小数部分等于0,这况明以十进制小数不能用有限位二进制小数表示。这时,只要取足够多的位数,使其误差达到所要求的精度就可以了。
综上所述,(117.8125)10{(117.8125)}_{10}(117.8125)10=(1110101.8125)2{(1110101.8125)}_{2}(1110101.8125)2
3、十进制转换为八进制,十六进制
- 十进制效转秧成二进制效的这种方法其实也适用于十进制数转换成其他进制的效,只是基数不再是2,而是要转换的进制数的基数。下面的例子是将这个十进制数转换成八进制数。
1、整数部分
(117)10{(117)}_{10}(117)10;
117/8 = 14 … 5 最低整数位
14/8 = 1 … 6
1/8 = 0 … 1 最高整数位
因此,(117)10{(117)}_{10}(117)10=(165)8{(165)}_{8}(165)8
2、小数部分
(0.8125)10{(0.8125)}_{10}(0.8125)10;
0.81258 = 6.5 6 最高小数位
0.58 = 4.0 4 最低小数位
(0.8125)10{(0.8125)}_{10}(0.8125)10=(0.64)8{(0.64)}_{8}(0.64)8;
综上,(117.8125)10{(117.8125)}_{10}(117.8125)10=(165.64)8{(165.64)}_{8}(165.64)8
4、二进制数,八进制数和十六进制数之间的转换
- 八进制数的基数为8(8=23{2}^{3}23),十六进制数的基数为16(16=24{2}^{4}24)。二进制数,八进制数和十六进制数之间具有2的整指数倍关系,因而可以之间转换。
1、二进制数转化为八进制数
- 从小数点开始,分别向左,向右按3位分组转换成相应的八进制数字字符,到最后不满3位的,则需补0(整数部分最高位前补0,小数部分最低位后补0)。
- 举例:将二进制数(1101101.10101)2{(1101101.10101)}_{2}(1101101.10101)2转化为八进制数
具体方法为
因此,(1101101.10101)2{(1101101.10101)}_{2}(1101101.10101)2=(155.52)8{(155.52)}_{8}(155.52)8
2、八进制数转化为二进制数
- 将每位八进制数用3位二进制数表示即可。
- 举例:将八进制数(345.64)8{(345.64)}_{8}(345.64)8转化为二进制数
具体方法为
因此,(345.64)8{(345.64)}_{8}(345.64)8=(011100101.1101)2{(011100101.1101)}_{2}(011100101.1101)2
3、二进制数转换为十六进制数
- 从小数点开始,分别向左,向右按4位分组转换成相应的十六进制数字字符,到最后不满4位的,则需补0(整数部分最高位前补0,小数部分最低位后补0)。
- 举例:将二进制数(1101101.10101)2{(1101101.10101)}_{2}(1101101.10101)2转换为十六进制数
具体方法
因此,(1101101.10101)2{(1101101.10101)}_{2}(1101101.10101)2=6D.A8)16{6D.A8)}_{16}6D.A8)16
4、十六进制数转化为二进制数
- 将每位十六进制数用4位二进制数表示即可
- 举例:将十六进制数(A8D.6C)16{(A8D.6C)}_{16}(A8D.6C)16转换为二进制数
具体方法为
因此,(A8D.6C)16{(A8D.6C)}_{16}(A8D.6C)16=(101010001101.011011)2{(101010001101.011011)}_{2}(101010001101.011011)2
四、二进制的加减乘除
因为二进制各位上的数必须小于2以及大于等于2就要进位的特点,二进制加法运算法则:加法算式和十进制加法一样,把右边第一位对齐,依次相应数位对齐。个数位满二向上一位进一。
同样的因为二进制个数位上具有必须小于2、大于等于2就要进位以及不够减需要借“1”的特点,二进制加减法运算法则:将右边第一位对齐,依次相应数位对齐,依次做减法,同一数位不够减时向高位“借一”,“借一当二”。
二进制的运算算术运算二进制的加法:0+0=0,0+1=1 ,1+0=1, 1+1=10(向高位进位);
二进制的减法:0-0=0,10-1=1(向高位借位) 1-0=1,1-1=0 (模二加运算或异或运算) ;
二进制的乘法:0 * 0 = 0 0 * 1 = 0,1 * 0 = 0,1 * 1 = 1 二进制的除法:0÷0 = 0,0÷1 = 0,1÷0 = 0 (无意义),1÷1 = 1 ;
逻辑运算二进制的或运算:遇1得1 二进制的与运算:遇0得0 二进制的非运算:各位取反。
五、机器数的表示形式及其表示范围
1、真值与机器数
- 真值:一个带符号数由两部分组成:一部分表示数的符号,另一部分表示数的数值。一般,直接用正号“+”和负号“-”来表示符号的二进制数,叫做符号数的真值。
- 机器数:计算机中的数是用二进制来表示的,数的符号也是用二进制来表示的。把一个数连同其符号在内在机器中的表示加以数值化,这样的数称为机器数。
- 一般用最高有效位来表示数的符号,正数用0表示,负数用1表示。
- 机器数可以用不同的码制来表示,常用的有原码,反码和补码表示方法。下面来介绍这三种表示方法。
2、数的原码表示
- 原码又称为“符号-数值表示”。在以原码形式表示的正数和负数中,第1位表示符号位,对于正数,符号位记为0,对于负数,符号位记为1,其余各位表示数值部分。
1、整数
例:
N1 = +10011 | N2 = - 01010 |
---|---|
[N1]原{[N1]}_{原}[N1]原 = 010011 | [N2]原{[N2]}_{原}[N2]原= 101010 |
根据上述源码形成规则,一个n位数的整数N的原码(包含一位符号位)表示为
- 注意:当n<0时,2n−1{2}^{n-1}2n−1-N就相当于2n−1{2}^{n-1}2n−1+|N|,其实就是在符号位把符号变为1。
- 对于这样的n位整数其原码表示的数的范围为:-(2n−1{2}^{n-1}2n−1-1) ~ (2n−1{2}^{n-1}2n−1 -1)。
2、定点小数
- 对于定点小数,小数点通常定在最高位的左边,这是数值小于1。定点小数原码一般表示为:
- 对于这样的m位小数(含一符号位)其原码表示数的范围为: -(1 - 2−(m−1){2}^{-(m-1)}2−(m−1)) ~ (1 - 2−(m−1){2}^{-(m-1)}2−(m−1))。
3、总结
- 当N为正数时,[N]原和N的区别只是增加一位用0表示的符号位。由于在数的左边增加一位0对该数的数值并无影响,所以[N]原就是N本身。
- 当N为负数时,[N]原和N的区别是增加一位用1表示的符号位。
- 在原码表示中,有两种不同形式的0,即:
[+0]原{[+0]}_{原}[+0]原 = 000…0 或 0.00…0
[−0]原{[-0]}_{原}[−0]原 = 100…0 或 1.00…0
3、数的反码表示
- 反码又称为“对1的补数”。用反码表示时,左边第一位也是符号位,符号位为0代表正数,符号位为1代表负数,对于负数,反码的数值是将原码数值按位求反,而对于正数,反码和原码相同。所以,反码数值的形成与它的符号位有关。
1、整数
例:
N1 = +10011 | N2 = - 01010 |
---|---|
[N1]反{[N1]}_{反}[N1]反 = 010011 | [N2]反{[N2]}_{反}[N2]反= 110101 |
根据上述反码形成规则,一个n位的整数N(包含一位符号位)的反码一般表示为:
- 对于这样的n位整数其反码表示的数的范围为:-(2n−1{2}^{n-1}2n−1-1) ~ (2n−1{2}^{n-1}2n−1 -1)。
2、定点小数
- 对于定点小数,若小数部分的位数为m位,则定点小数反码一般表示为:
对于这样的m位小数(含一符号位)其反码表示数的范围为:-(1 - 2−(m−1){2}^{-(m-1)}2−(m−1)) ~ (1 - 2−(m−1){2}^{-(m-1)}2−(m−1))
3、总结
- 正数N的反码[N]反与原码[N]原相同。
- 对于负数N,其反码[N]反的符号为1,数值部分是将原码数值按位求反。
- 在反码表示中,有两种不同形式的0,即:
[+0]反{ [+0]}_{反}[+0]反 = 000…0 或 0.00…0
[−0]反{ [-0]}_{反}[−0]反 = 111…1 或 1.11…1
4、数的补码表示
- 补码又称为“对2的补数”。在补码表示法中,正数的补码表示同原码和反码的表示是相同的,而负数的补码表示却不同。对于负数的补码,其符号位为1,而数值位是将原码“按位求反,末位加1”。
1、整数
例:
N1 = +10011 | N2 = -01010 |
---|---|
[N1]补{[N1]}_{补}[N1]补 = 010011 | [N2]补{[N2]}_{补}[N2]补= 110110 |
根据上述补码形成规则,一个n位的整数N(包含一位符号位)的补码一般表示为:
- 注意:在为负数时与原码,补码区分。
对于这样的n位整数其补码表示的数的范围为:-2n−1{2}^{n-1}2n−1 ~ (2n−1{2}^{n-1}2n−1 -1)。
2、定点小数
- 对于定点小数,补码一般表示为:
对于这样的m位小数(含一符号位)其补码表示数的范围为:-1 ~ (1 -2−(m−1){2}^{-(m-1)}2−(m−1))
3、总结
- 正数N的补码[N]补与原码[N]原和反码[N]反相同。
- 对于负数N,其补码[N]补的符号为1,数值部分为反码数值加1。
- 在补码表示法中,0的表示形式是唯一的,即:
[+0]补{[+0]}_{补}[+0]补 = 000…0 或 0.00…0
[−0]补{[-0]}_{补}[−0]补= 000…0 或 0.00…0
5、用一字节表示数
原码 | 反码 | 补码 | |
---|---|---|---|
+7 | 0000 0111 | 0000 0111 | 0000 0111 |
-7 | 1000 0111 | 1111 1000 | 1111 1001 |
+0 | 0000 0000 | 0000 0000 | 0000 0000 |
-0 | 1000 0000 | 1111 1111 | 0000 0000 |
数的范围 | 1111 1111~0111 1111 (-127 ~ +127) | 1000 0000~0111 1111(-127 ~ +127) | 1000 0000~0111 1111(-128 ~ +127) |
- 注意:负数补码转换成十进制数:最高位(符号位)不动,其余位取反加1
- 例 补码:11111001
取反:10000110
加1:10000111 = -7
6、数在机器中的表示形式
- 绝大多数机器数的表示采用补码表示法。像C语言中整数在计算机中就是以其补码的形式存储的。
7、补码的加、减运算
- 由补码的定义可以证明如下补码加、减运算规则:
- 补码的加减法运算表明:两个数和的补码等于两个数的补码之和,而两个数的差的补码也可以用加法来实现。
- 注意
- 符号位和数据位一起参加运算;
- 如果符号位产生进位,则需要将此进位“丢掉”;
- 运算结果的符号位为0时,说明是正数的补码;
- 运算结果的符号为1时,说明是负数的补码。
- 例题:
- 【例1】已知N1=+10011,N2=-01010,求[N1+N2]补{[N1+N2]}_{补}[N1+N2]补和[N1-N2]补{[N1-N2]}_{补}[N1-N2]补。
- 由于符号位产生了进位,因此,要将此进位丢掉,即[N1+N2]补{[N1+N2]}_{补}[N1+N2]补 = 001001,运算结果的符号位为0,说明是正数的补码,故其真值为N1 + N2 = + 01001
- 运算结果符号位为0,说明是正数的补码,故其真值为[N1-N2]补{[N1-N2]}_{补}[N1-N2]补 = +11101
8、无符号整数
- 某些情况下,要处理的数全是正数,此时再保留符号位就没有意义了。我们可以把最高有效位也作为数值处理,这样的数称为无符号数。
- 16位无符号数的表示范围是:0 ≤ N ≤ 65535,
- 8位无符号数的表示范围是: 0 ≤ N ≤ 255。
- 在计算机中最常用的无符号整数是表示地址的数。在某些情况下,带符号的数(在机器中用补码表ボ)与无符号数的处理是有差别的,在处理数时,应注意它们的区别。
9、字符表示法
- 计算机中处理的信息并不全是数,有时需要处理字符或字符串,例如从键盘输入的信息或打印输出的信息都是字符方式输入输出的,因此,计算机必须能表示字符(例如,C语言中可通过定义字符型变量来存储字符)。
- 常见字符类型:
字母:A、B、…、Z,a、b、…、z;
数字:0、1、…、9;、
专用字符:+、-、﹡、∕、↑、SP(space空格)、…
非打印字符:BEL(响铃)、LF(换行)、 CR(回车)、…、 - 注意:
- 这些字符在机器里必须用二进制数来表示。
- 采用美国信息交换标准代码ASCII(American Standard Code for Information Interchange)来表示。
- 用一个字节(8位二进制码)来表示一个字符,
- 低7位为字符的ASCII值,最高位一般用作校验位。
- 常用字符的ASCII值
六、二进制数的位运算
- 位运算主要包括:与(AND)、或(OR)、非(NOT)、异或(XOR)
1、逻辑变量
- 其值只能有0或1两种取值的变量
2、“与”运算
- “与”运算又称为逻辑乘,可用符号“·”或“∧”来表示,C语言中用“&”来表示。如有A、B两个逻辑变量,可能有的取值情况只有4种。
结论:即只有A、B两个变量取值均为1,则它们“与”运算的结果才为1,其它均为0。
3、“或”运算
- “或”运算又称为逻辑加,可用符号“+”或“∨”来表示,C语言中用“|”来表示。如有A、B两个逻辑变量,可能有的取值情况只有4种。
结论:即A、B变量中只要一个变量取值为1,则它们“或”运算的结果就是1。
4、“非”运算
- “非”运算又称为逻辑反,C语言中用“~”来表示。
结论:即将A的值求反。
5、“异或”运算
- “异或”运算可用符号“⊕ ” 来表示,C语言中用“^”来表示。如有A、B两个逻辑变量,可能有的取值情况只有4种。
结论:即当两个变量的取值相异时,则它们“异或”运算的结果就是1,相同则结果为0。
6、例题
【例】: 如果两个变量的其值为X=0X00FF,Y=0X5555,求 X&Y、X|Y、 ~X、X^Y的值
X =(0000000011111111)2{(0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1)}_{2}(0000000011111111)2
Y = (0101010101010101)2{(0101010101010101)}_{2}(0101010101010101)2
X&Y = (0000000001010101)2{(0000000001010101)}_{2}(0000000001010101)2 = 0x0055
X|Y= (0101010111111111)2{(0101010111111111)}_{2}(0101010111111111)2 = 0x55FF
~X = (1111111100000000)2{(1111111100000000)}_{2}(1111111100000000)2 = 0xFF00
X^Y = (0101010110101010)2{(0101010110101010)}_{2}(0101010110101010)2 = 0x55AA
七、总结
- 本博客主要介绍了计算机系统组成及其工作原理;进位计数制及其转换;机器数的表示形式及其表示范围;ニ进制数的位运算等。所有这些都是学习 C 语言的基础。
- 计算机是由硬件系统和软件系统组成的。硬件系统又是由控制器、运算器、存储
器、输人及输出设备五大部件构成的。其中,控制器和运算器集成在一起称为中央处理器( CPU ),控制器发出控制命令指挥其他逻辑部件进行工作。运算器可执行算术和逻辑运算操作;存储器分为内存和外存,所有的数据和程序必须在内存中运行和执行,内存中存放数据是以存储单元为单位进行存放的,每个存储单元都有一个存储地址,计算机就是通过存储地址来访问存储单元中的数据的。软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。计算机离开了软件系统是无法工作的,软件分为系统软件和应用软件,系统软件中最为
典型的就是操作系统,平时编制的软件通常是应用软件 - 计算机中使用的进制数是二进制数,而不是十进制数,因为二讲制只有两个数码,运算简单便于硬件实现,同时二进制便于逻辑运算。将十进制数转换成二进制数应分为整数部分转换和小数部分转换,整数部分转换可采用基数除法来实现,小数部分转换可采用基数乘法来实现。八进制和十六进制也是 C 语言中经常表示数据的进制,因为它们与二进制之间的转换非常方便,但要注意它们不是计算机中使用的进制。
- 机器数的表示形式有原码、反码和补码几种形式。计算机中通常是使用补码的形式来表示一个数,因为补码运算可以连同符号位一起参与运算,这便于运算器的设计和实现。
- 二进制的位运算有“与”运算、“或”运算、“非”运算和“异或”运算。
------部分内容摘选自《C语言程序设计教程》
C语言学习之路--计算机系统组成以及工作原理,进制之间的转换和机器数及其表示范围相关推荐
- c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
C 语言进制之间的转换 二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位 ...
- C语言实现不同进制之间的转换
C语言实现不同进制之间的转换 说明 运行环境 1.十进制转二进制 2.二进制转换成十进制数 3.十进制数转换成十六进制数 4.十六进制数转换成十进制数 说明 1.进制转换目前只限于非负数之间的转换(带 ...
- 计算机进位制转换方法,计算机系统的硬件之三不同进位制之间的转换
一. "十进制"与"二进制"的转换:除以2取余法 X ( 10) = b n × 2 n + b n-1 × 2 n-1 +--+ b 1 × 2 1 + b ...
- c 语言八进制与十进制转换,C 语言进制之间的转换
二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位的位权为100=1,第2 ...
- 乘基取整法是什么_深入理解计算机系统(六):进制间的转换原理
目录 1.进制的介绍 2.二进制转换成其他进制 3.十进制转换成其他进制 4.十六进制转换成其他进制 5.总结 上一篇博客我们讲解了信息的在计算机中是如何存储以及如何表示的.但是对于各个进制的转换只是 ...
- 【笔记】【C语言】任意进制之间的转换(支持小数部分)
整理一下,免得自己忘记,也希望能帮到有需要的人. ------------------------我是一条华丽的分割线------------------------ 全局变量:双精度浮点数p.字符数 ...
- 进制之间的转换(计算机系统基础)
进位计数制 一般情况,在R进制数字系统中,采用R个基本符号(0,1,2-R-1)表示各位上的数字,采用**"逢R进一"**的运算规则,对于每一个数位i,该位上的权为R^i.R被称为 ...
- 学习IP的分类和计算及各进制之间的转化
IP地址的分类及进制的转换 一. IP地址的分类 1. 什么叫IP? 2. IP的构成 3. IP的分类 4. 子网掩码 5. 计算网络地址 二. 进制的转换 1. 进制 2. 各进制之间的转化 2. ...
- 华清远见学习—“进制之间的转换”
进制转换 可以直接进行算术运算的数据 二进制(逢2进1):0~1 十进制(逢10进1):0~9 八进制(逢8进1):0~7 十六进制(逢16进1):0-9.a(A)-f(F) 其他进制转十进制 方法: ...
最新文章
- 嵌入式Linux驱动程序
- MySQL光标的使用
- 2016 校园招聘求职经历(二)
- C# 对程序窗口进程和进程ID
- 一步步编写操作系统 17 显存,显卡,显示器 上
- python上下键不能用_python退格、方向键无法正常使用解决方法
- 设置NPM/Electron国内源
- Linux运维常用命令及知识
- SQL处理非常见空串
- python辗转相除法求最大公约数_vb编程实现用辗转相除法求两个数a和b的最大公约数...
- Altium Designed导出Gerber,Gerber文件所对应的层
- Roberts算子,matlab代码实现
- 参考文献查阅网站大全
- 小程序瀑布流-是真的流啊
- dtools: error while loading shared libraries: libicui18n.so.55: cannot open shared object file
- 【P3369 普通平衡树】 Splay
- C语言常用语句之-分支语句
- Kylin快速入门系列(1) | Kylin的简单介绍及安装部署
- 从〇开始可微神经搜索DARTS分析第〇章:意义与基础结构
- 瑞萨单片USB设备使用