您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > c语言程序设计与项目实践第2章
第2章基本数据类型本章的学习重点◆数据类型的分类◆进位计数制及不同进制的转换◆常量的类型◆变量的定义及简单使用◆枚举的定义及使用2.1数据类型概述C语言中的数据类型多种多样,按照其结构复杂度大致可分为基本数据类型、指针类型、空类型、文件类型和构造类型等。C语言数据类型基本数据类型整型实型字符型(char)枚举类(enum)短整型(short)整型(int)长整型(long)单精度(float)双精度(double)指针空类型(void)构造类型文件类型(FILE)数组结构体(struct)联合体(unio)2.2进制换算进制换算就是数值在不同的计数制之间进行的等值或等价换算,数值在换算前后保持不变,只是表达方式不同而已。计数制是为不同的计数单位制定的标准。2.2.1进位计数制概述实际应用经常应用的计数制,例如:十二进制(一打鸡蛋为十二个),六十进制(60秒为一分钟,60分钟为一小时)等等。这种逢几进一的机制称为进位计数制。与C语言关系最密切的几种计数制是:二进制、八进制、十进制和十六进制。2.2.1进位计数制概述二进制:0、1八进制:0、1、2、3、4、5、6、7十进制:0、1、2、3、4、5、6、7、8、9十六进制:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F2.2.1进位计数制概述计数制二进制八进制十进制十六进制符号表示BODH进位规则逢二进一逢八进一逢十进一逢十六进一基数281016数码0、10、1…70、1…90、1…F位权2x8x10x16x2.2.2二进制与其他进制的转换1.二进制转换为十进制二进制转换为十进制分成两部分进行,一部分是整数部分,一部分是小数部分范例2.1:二进制数10010.11(2)转换为十进制数10010.11(2)=1x24+0x23+0x22+1x21+0x20+1x2-1+1x2-2=18.75(10)2.二进制转换八进制二进制到八进制的转换采用三位一体的计算方法,同样分为整数部分和小数部分两部分考虑范例2.2:将二进制数1110100.101101(2)转换为八进制数1110100101101(2)—〉001/110/100/101/101(2)—〉1/6/4/5/5(8)=164.55(8)2.2.2二进制与其他进制的转换3.二进制转换十六进制二进制到十六进制的转换采用四位一体的计算方法,计算时同样整数部分与销数部分分开范例2.3:将二进制数1110100.101101(2)转换为十六进制数1110100.101101(2)—〉0111/0100/1011/0100(2)—〉7/4/B/4(16)=74.B4(16)2.2.2二进制与其他进制的转换二进制八进制十进制十六进制00000000001111001022200113330100444010155501106660111777100010881001119910101210A10111311B11001412C11011513D11101614E11111715F进制转换表2.2.3八进制与其他进制的转换1.八进制转换为十进制八进制向十进制的转换也要按照位权和数码作积再依次相加的方法1270(8)=1x83+2x82+7x81+0x80=696(10)2.八进制转换为二进制将八进制数从右到左每位数字转换为3位二进制数范例2.4:将八进制数5361(8)转换为二进制数5361(8)—〉101/011/110/001(2)—〉101011110001(2)2.2.3八进制与其他进制的转换3.八进制转换为十六进制八进制到十六进制的转换通常以二进制为中介,即先将八进制转换为二进制,然后再由二进制转换为八进制。范例2.5:将八进制754231(8)转换为十六进制解析:先将八进制数754231(8)转换为二进制754231(8)—〉111/101/100/010/011/001(2)—〉111101100010011001(2)再将二进制转换为十六进制111101100010011001(2)—〉0011/1101/1000/1001/1001(2)—〉3/D/8/9/9(16)—〉3D899(16)2.2.4十六进制与其他进制的转换十六进制数是C语言中主要的赋值方式之一,同时也是二进制在C语言中的主要表现方式。1.十六进制转换为十进制十六进制向十进制的转换同样按照位权和数码作积再依次相加的方法13FB(16)=1x163+3x162+Fx161+Bx160=1x163+3x162+15x161+11x160=5115(10)2.十六进制转换为二进制转换方法为:将十六进制数从右到左每位数字转换为4位二进制数范例2.6:将十六进制数FB1A4(16)转换为二进制FB1A4(16)—〉1111/1011/0001/1010/0100(2)—〉11111011000110100100(2)2.2.4十六进制与其他进制的转换3.十六进制转换为八进制十六进制转换为八进制同样需要二进制作中介。范例2.7:将十六进制数3C6D(16)转换为八进制数先将十六进制数3C6D(16)转换为二进制3C6D(16)—〉0011/1100/0110/1101(2)—〉11110001101101(2)再将其转换为八进制:11110001101101(2)—〉11/110/001/101/101(2)—〉3/6/1/5/5(8)—〉36155(8)2.2.4十六进制与其他进制的转换十进制到二进制的转换分成两部分,一部分是整数部分的转换,一部分是小数部分的转换。1.整数部分转换整数十进制到二进制的转换采用除二取余再反向的方法。将整数作除二取余运算,直到被除数为零,然后将余数反向顺序写出,就是整数部分的二进制表达。2.2.5十进制与二进制的转换范例2.8:将十进制数158转换为二进制数解析:首先对158进行除二取余运算158/2=79......079/2=39......139/2=19......119/2=9......19/2=4......14/2=2......02/2=1......01/2=0......1将所得余数自下而上按顺序从左到右写出:10011110,这就是十进制数158的二进制表示。2.2.5十进制与二进制的转换2.小数部分转换小数部分十进制到二进制的转换采用乘二取整再顺序写出的方法。将小数部分与2相乘,记录乘积的整数部分,将小数部分再与2相乘,记录乘积的整数部分,这样执行下去直到小数部分为0或满足要求精度。2.2.5十进制与二进制的转换范例2.9:将十进制数0.375转换为二进制数,要求精确到小数点后6位解析:对二进制数0.375作乘2取整运算0.375*2=0.700......00.700*2=1.400......10.400*2=0.800......00.800*2=1.600......10.600*2=1.200......10.200*2=0.400......0将上述所记录整数部分顺序写出:0.010110,这就是小数0.375的近似二进制表达。2.2.5十进制与二进制的转换机器数机器数的表示形式为:用“0”表示正数,“1”表示负数,其余位表示数值。通常,把在计算机内存中正、负号数字化的数称为机器数。2.2.6机器数及其在内存中存储格式原码原码是计算机中数据存储方式之一。其表示形式为:数值用绝对值表示,在数值的最高位用“0”和“1”分别表示数值的正和负。范例2.10:写出+35和-35的原码表示形式(32位表示)解析:首先确定数据的符号作为最高位,然后将数值转换为二进制数,以32位表示[+35]原码=00000000000000000000000000100011[-35]原码=100000000000000000000000001000112.2.6机器数及其在内存中存储格式反码反码在计算机中的表示方式为:正数的反码与原码相同,负数的反码是其原码数值部分按各位取反,符号位不变。范例2.11:写出+35和-35的反码表示形式(32位表示)解析:首先分别写出两个数的原码,以32位表示[+35]原码=00000000000000000000000000100011[-35]原码=10000000000000000000000000100011再将负数35的原码取反,得+35和-35的反码:[+35]反码=00000000000000000000000000100011[-35]反码=111111111111111111111111110111002.2.6机器数及其在内存中存储格式补码计算机补码的表示形式为:正数的补码与原码、反码相同,负数的补码是其反码加1,符号位不变。范例2.12:写出+35和-35的补码表示形式(32位表示)解析:首先分别写出两个数的原码,以32位表示[+35]原码=00000000000000000000000000100011[-35]原码=10000000000000000000000000100011再将负数35的反码加1,得+35和-35的补码:[+35]补码=00000000000000000000000000100011[-35]补码=111111111111111111111111110111012.2.6机器数及其在内存中存储格式0的反码和补码在反码和补码表示中,0是一个比较特殊的数字。由于0可表示为正0和负0,因此,0的原码和反码分别有两种表示形式:[+0]原码=00000000000000000000000000000000[-0]原码=10000000000000000000000000000000[+0]反码=00000000000000000000000000000000[-0]反码=11111111111111111111111111111111而对于+0和-0的补码,有:[+0]补码=00000000000000000000000000000000[-0]补码=00000000000000000000000000000000可见0的补码表示是唯一的。2.2.6机器数及其在内存中存储格式在程序执行过程中,其值不发生改变的量称为常量。常量与数据类型结合又可分为整型常量、浮点常量、字符常量和枚举常量。在程序中,常量可以不经说明直接引用。例如,有如下语句:i=10;2.3常量常用的整型常量有八进制、十进制和十六进制三种1.八进制常量必须以数字0开头,数码取值为0~7。八进制数通常是无符号数,例如:015,012,06等。2.十六进制常量十六进制常量必须以0X或0x开头。其数码取值为0~9,A~F或a~f。例如:0x15,0xfd,0xDD,0x1E2.3.1整型常量3.十进制常量十进制常量没有前缀。其数码为0~9。范例2.13使用不同的格式,输出结果就事对应的表示形式,输出整数521,0521和0x521的几种表示方法。(OutputInteger.c)2.3.1整型常量实型也称为浮点型。C语言中,实型常量也称为实数或者浮点数,并且,实型常量只采用十进制表示形式。实型常量的表达方式有两种:小数形式与指数形式。2.3.2实型常量1.小数形式实数的小数形式由数字0–9以及小数点组成。其中,小数点前仅有零位时,数字0可省略,小数点后仅有0位时,数字0也可以省略。例如:0.391、14.0、.556、-33.等均为合法的实数。2.3.2实型常量2.指数形式实数的指数形式由:十进制数码、阶码标志e或E以及阶码组成。其中阶码包括阶符和阶数两部分,阶符可为+或-,其中+可省略,阶数只能是十进制正整数或零,阶码不能省略。指数形式的一般表达方式为:aEn,其中,a为十进制数,n为阶码,如+5、-6及+9等均为阶码。如实
本文标题:c语言程序设计与项目实践第2章
链接地址:https://www.777doc.com/doc-3969023 .html