c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型_教学资源|题库|学习文库-「普洱教育」

主页 > 高中 > 正文

c语言的编译和执行、原码反码补码、存储单元、数据结构、C语言提供的位运算符列表、空类型

教学资源|题库|学习文库-「普洱教育」来源: https://www.puerjy.cn 2020-05-17 04:02高中 863179 ℃

个人收集整理 仅供参考学习 循环总结 1运算符 算术+-*/ %;
2、逻辑 && || 。,

3、关系><=... 。=;

4、条件。:

5、if(){} if(){}esle{} if(){}else if{}else if{} switch(){ case 值:语句break; case 值:语句break; case 值:语句break; case 值:语句break; deafult; } goto if while(){} do{} while(); for(;;){} break; continue; c语言的编译和执行 C语言程序的代码编写完成之后,就可以在机器上运行它了。
我们知道C语言是一种程序设计语言,它很容易被人们看懂和接受;但是,对于计算机来说,却不能接受这种语言,而它只能接受机器语言。为此必须首先把C语言程序翻译成相应的机器语言程序,这个工作叫编译。
我们把编写好的C语言程序叫C源程序,从C源程序到在计算机上得到运行结果。文档来自于网络搜索 操作过程如图:C语言的编译和执行.gif 源文件的编辑:为了编译C源程序,首先要用系统提供的编辑器建立一个C语言程序的源文件。一个C源文件是一个编译单位,它以文本格式保存的。源文件名自定,文件的扩展名(或后缀名)为".c"或".cpp"。例如, 文档来自于网络搜索 myfile.c 一个比较大的C语言程序往往可划分为若干模块,每个模块由不同的开发者或开发小组负责编写。对每个模块可建立一个源文件。
因此,一个大的C程序可包含多个源文件,这些源文件都要进行编译。文档来自于网络搜索 编译:源文件建立好后,经检查无误后就可进行编译。编译是由系统提供的编译器完成,编译命令随系统的不同而异,具体操作时可参考相应的系统手册。
例如,对于Turbo C,一般通过Turbo C的编辑环境界面中的Compile菜单中的Compile命令进行编译,编译器在编译时对源文件进行语法和语义检查,并给出所发现的错误。用户可根据错误情况,使用编辑器进行修改,然后对修改后的源文件再度编译。用户也可以在Compile菜单中选Make命令进行编译,它能直接生成可执行的文件,此时如果系统发现用户的源程序有语法错误,就发出错误的参考信息,提示用户进行错误代码的修改,然后用户再重新进行编译,值得注意的是,1 / 8 个人收集整理 仅供参考学习 C语言的编译器不对数组越界进行检查,这一点用户自己一定要注意数组的越界问题。
文档来自于网络搜索 连接:若在上述步骤中,用户选择Compile命令进行编译,编译所生成的目标文件(*.obj)是相对独立的模块,但还不能直接执行,用户还必须用连接编辑器把它和其它目标文件以及系统所提供的库函数进行连接装配,生成可执行文件才能执行。可执行文件的名字可自由指定,默认的执行文件的名字与源文件的名字一致,可执行文件的扩展名为“.exe”。文档来自于网络搜索 执行:执行文件生成后,就可执行它了。若执行的结果达到预想的结果,则说明程序编写正确。否则,就需进一步检查修改源程序,重复上述步骤,直至得到正确的运行结果为止。文档来自于网络搜索 存储单元 存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。
每个单元有一个地址,是一个整数编码,可以表示为二进制整数。程序中的变量和主存储器的存储单存储单元元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。指针的内容是存储地址在存储器中有大量的存储元,把它们按相同的位划分为组,组内所有的存储元同时进行读出或写入操作,这样的一组存储元称为一个存储单元。
一个存储单元通常可以存放一个字或若干个字节;存储单元是CPU访问存储器的基本单位。文档来自于网络搜索 数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
数据结构往往同高效的检索算法和索引技术有关。文档来自于网络搜索 常用数据结构 数组 (Array) 在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。
这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。文档来自于网络搜索 栈 (Stack) 是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
文档来自于网络搜索 队列 (Queue) 一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。文档来自于网络搜索 链表 (Linked List) 是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
文档来自于网络搜索 树 (Tree) 2 / 8 个人收集整理 仅供参考学习 是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:

(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。

(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。

(3)K中各结点,对关系N来说可以有m个后继(m>=0)。文档来自于网络搜索 图 (Graph) 图是由结点的有穷集合V和边的集合E组成。
其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。文档来自于网络搜索 堆 (Heap) 在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。文档来自于网络搜索 散列表 (Hash) 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。
由此,不需比较便可直接取得所查记录。
称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。文档来自于网络搜索 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。
C语言提供了6个位操作运算符。文档来自于网络搜索 这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。 原码反码补码 在计算机内,定点数有3种表示法:原码、反码和补码 所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 文档来自于网络搜索 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。


1、原码、反码和补码的表示方法 原码:在数值前直接加一符号位的表示法。 例如: 符号位 数值位 [+7]原= 0 0000111 B [-7]原= 1 0000111 B 注意:a. 数0的原码有两种形式: [+0]原=00000000B [-0]原=10000000B b. 8位二进制原码的表示范围:-127~+127 反码: 正数:正数的反码与原码相同。 负数:负数的反码,符号位为“1”,数值部分按位取反。 例如: 符号位 数值位 [+7]反= 0 0000111 B [-7]反= 1 1111000 B 注意:a. 数0的反码也有两种形式,即 [+0]反=00000000B 3 / 8 个人收集整理 仅供参考学习 [- 0]反=11111111B b. 8位二进制反码的表示范围:-127~+127 补码的表示方法 补码的表示: 正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。 例如: 符号位 数值位 [+7]补= 0 0000111 B [-7]补= 1 1111001 B 补码在微型机中是一种重要的编码形式,请注意: a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。
正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。文档来自于网络搜索 b. 与原码、反码不同,数值0的补码只有一个,即 [0]补=00000000B。
c. 若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。文档来自于网络搜索 2.原码、反码和补码之间的转换 由于正数的原码、补码、反码表示方法均相同,不需转换。 在此,仅以负数情况分析。
已知原码,求补码。 例:已知某数X的原码为10110100B,试求X的补码和反码。
解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
文档来自于网络搜索 1 0 1 1 0 1 0 0 原码 1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反 1 +1 1 1 0 0 1 1 0 0 补码 故:[X]补=11001100B,[X]反=11001011B。 已知补码,求原码。
分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。
但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1 有方法。文档来自于网络搜索 例:已知某数X的补码11101110B,试求其原码。 解:由[X]补=11101110B知,X为负数。
求其原码表示时,符号位不变,数值部分按位求反,再在末位加1。文档来自于网络搜索 1 1 1 0 1 1 1 0 补码 1 0 0 1 0 0 0 1 符号位不变,数值位取反 1 +1 1 0 0 1 0 0 1 0 原码 计算机语言 计算机语言(Computer Language)指用于人与计算机之间通讯的语言。
计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。4 / 8 个人收集整理 仅供参考学习 为了使电子计算机进行各种工作,就需要有一套用以编写计算机程序的数字、字符和语法规划,由这些字符和语法规则组成计算机各种指令(或各种语句)。这些就是计算机能接受的语言。
文档来自于网络搜索 计算机程序设计语言,通常简称为编程语言,是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。
一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。文档来自于网络搜索 机器语言:机器语言是指一台计算机全部的指令集合。
电子计算机所使用的是由"0"和"1"组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由"0"和"1"组成的指令序列交由计算机执行,这种计算机能够认识的语言,就是机器语言。
使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。 计算机语言因此程序就是一个个的二进制文件。一条机器语言成为一条指令。指令是不可分割的最小功能单元。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。
但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。 文档来自于网络搜索 汇编语言:为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用"ADD"代表加法,"MOV"代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。
然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。 汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。 文档来自于网络搜索 高级语言: 高级语言的发展:从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1954年,第一个完全脱离机器硬件的高级语言--FORTRAN问世了,40 多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/

1、Pascal、C、PROLOG、Ada、C++、VC、VB、JAVA等。 特别要提到的:在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言——C语言。 高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。
相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。
计算机语言60年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是个自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。
这一切,极大地震动了计算机界,史称"软件危机"。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。
1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言--Pascal5 / 8 个人收集整理 仅供参考学习 语言出现,标志着结构化程序设计时期的开始。 80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。
在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具体的应用功能,也就是对象(Object)。
其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完全不用关心,C++、Visual Basic、Delphi就是典型代表。
高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。文档来自于网络搜索 Null类型 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量 void a; 这行语句编译时会出错,提示“illegal use of type void”。 void真正发挥的作用在于: 1) 对函数返回的限定 void fun(); 2) 对函数参数的限定 int fun(void)。
C语言提供的位运算符列表: 运算符 含义 描述 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 << 左移 用来将一个数的各二进制位全部左移N位,右补0 >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0

1、“按位与”运算符(&) 按位与是指:参加运算的两个数据,按二进制位进行“与”运算。
如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。
按位与其实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。
若,A=true,B=true,则A∩B=true 例如:3&5 3的二进制编码是11(2)。
(为了区分十进制和其他进制,本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。将11

(2)补足成一个字节,则是00000011

(2)。5的二进制编码是101

(2),将其补足成一个字节,则是00000101

(2)文档来自于网络搜索 按位与运算: c语言代码: #include main() 6 / 8 个人收集整理 仅供参考学习 { int a=3; int b = 5; printf("%d",a&b); }

2、“按位或”运算符(|) 两个相应的二进制位中只要有一个为1,该位的结果值为1。
借用逻辑学中或运算的话来说就是,一真为真。 c语言源代码: #include main() { int a=060; int b = 017; printf("%d",a|b); }

3、按位异或^ 两个相应的二进制位中相同为0,不同为1 c语言源代码: #include main() { int a=3; int b = 4; int c; c=a^b; printf("c=%d",c); }

4、“取反”运算符(~) 他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。 源代码: #include main() { int a=4; printf("%d",~a); } 首先看等号左边 (100) 的二进制表示为: 0110 0100 按位取反的意思就是每一位取反,0变1,1变0 所以: ~100 的二进制表示为:1001 1011 所以等号左边=1001 1011 7 / 8 个人收集整理 仅供参考学习 再看右边 -101. 一旦看到出现负数,那么这个数一定是按有符号数的规则来表示的。一个二进制数 按位取反并加一以后就可以得到它自己的负数的补码,也就是说: 文档来自于网络搜索 ~x+1=-x 所以,我们把101按位取反加一 先取反: ~101=10011010 再加一: ~101+1=10011011=-101 所以等号右边=10011011=左边,所以等号成立。

5、左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负 值),其右边空出的位用0填补。 源代码: #include main() { int a=15; printf("%d",a<<2); } 左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,15<<2=60,即乘了4。


6、右移运算符(>>) 右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负 值),移到右端的低位被舍弃,对于无符号数,高位补0。
对于有符号数,某些机器将对左边空出的部分 用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。
注 意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移 入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。
有的系统移入0,有的文档来自于网络搜索 系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。
源代码: #include main() { int a=4; printf("%d",a>>1); } 8 / 8 补码运算
奋斗小学, 首都师范大学附属中学, 榆林华栋中学, 深圳市新华中学, 宁强天津中学, 我本初中,

Tags: 补码运算

本文章来自网友上传,不代表本网站立场,转载请注明出处:https://www.puerjy.cn/554051.html
热门标签