1、第三章 数据类型、运算符和表达式,2,主要内容,预备知识 常量和变量的概念 各种数据类型的常量及变量 变量赋初值 不同类型数据之间的混合运算 常用运算符和表达式 输入函数与输出函数,3,3.1 预备知识 1、进制以及进制之间的转换 2、数据在计算机中的存储方式,4,1、进制以及进制之间的转换 计算机中数的表示及进制转换 数码、基与权 数码:表示数的符号 基:数码的个数(即进制的名称) 权:每一位所具有的值 数制,5,十进制:4956= 410+910 +510+610,二进制:1011=12+02 +12+12,十六进制:81AE=816+116 +1016+1416,八进制:4275=48+
2、28 +78+58,八进制:4275=48+28 +78+58,十六进制:81AE=816+116 +1016+1416,二进制:1011=12+02 +12+12,十进制:4956= 410+910 +510+610,6,7,8,一、二进制数的逻辑运算 计算机中的逻辑关系是一种二值逻辑,逻辑运算的结果只有“真”或“假”两个值。二值逻辑很容易用二进制的0和1来表示,一般用1表示真,用0表示假。,9,与,或,非,表示方式,逻辑代数的三种基本逻辑关系AND、OR、非A写成 ,10,(1)与运算与运算又称逻辑乘,通常用或表示。运算规则为按位进行“与”运算,若进行“与”操作的两位均为1,则结果为1;两
3、位中有一位为0,则结果为0。具体规则如下: 00=0 01=0 10=0 11=1,11,(2)或运算 或运算又称逻辑加,通常用或+表示。运算规则是按位进行“或”运算,若进行“或”操作的两位中有一位为1,则结果为1;两位均为0,则结果为0。具体规则如下: 00=0 01=1 10=1 11=1,12,(3)非运算 非运算实现对单个逻辑值的处理,也称为逻辑取反操作,通常用表示。运算规则如下:,13,二、数制间的转换,十进制数,非十进制数,非十进制数,十进制数,二、八、十六进制之间的转换,14,余数法:除基数取余数、由下而上排列。 十进制 八进制,示例1:,8 75 38 9 18 1 10,结果
4、为:113O,15,进位法:用十进制小数乘基数,当积为0或达到 所要求的精度时,将整数部分由上而下排列。,结果为:0.101B,示例: 0.625 21.250 整数为1 20.50 整数为0 21.0 整数为1 小数值为0,16,十进制转换成非十进制,对于十进制转化为 r 进制 整数部分:小数部分:,除 r 取余,直到商为0;先取的余数在低位,后取的余数在高位。,乘 r 取整,直到值为0或达到精度要求。先取的整数在高位,后取的整数在低位。,17,12,例:十进制25.13转换成二进制,先将整数部分 25转换为二进制,25,6,3,1,2,2,2,2,1,0,0,1,1,2,0,收集,得到:
5、11001,B,18,将0.13转换为二进制,精确到后4位。0.13*2=0.26 0.26*2=0.52 0.52*2=1.04 0.04*2=0.08,收集,0,0,1,0,收集,得到:0.0010,B,19,所以: (25)10 = (11001)2 (0.13)10 = (0.0010)2 (25.13)10 = (11001.0010)2,20,例:把(111011)2 ,(136)8 ,(1F2A)16转换为十进制数。,二进制、八进制、十六进制转换成十进制 方法:按位权相加,21,例:把(111011)2 ,(136)8 ,(1F2A)16转换为十进制数。,22,二进制 十六进制,
6、二进制 八进制,二、八、十六进制之间的转换,整数从右向左 小数从左向右,23,二进制转换为八进制或十六进制,整数部分:从低位向高位每3位(八进制)/4位(十六进制) 为一组,高位不足的补0凑足3位 / 4位,然后每组分别按权展开; 小数部分:从高位向低位每3位(八进制)/4位(十六进制) 为一组,低位不足的补0凑足3位 / 4位,然后每组分别按权展开。,24,10 110 110 111 . 010 1 ( 2 6 6 7 . 2 4 )8,101 1011 0111.0101 ( 5 B 7 . 5 )16,示例: 10110110111.0101,00,为八进制进制 二进制转换,为十六进制
7、二进制转换,0,0,25,2、计算机中数据的存储方式-字节和位 内存以字节为单元组成 每个字节有一个地址 一个字节一般由8个二进制位组成 每个二进位的值是0或1,26,数值(整型)的表示方法原码、反码和补码 原码: 最高位为符号位,其余各位为数值本身的绝对值 反码: 正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码: 正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反;再对整个数加1,27,原码,+7原= 0 0000111 B - 7原= 1 0000111 B,反码,+7反= 0 0000111 B -7反= 1 1111000 B,28,补码,+7补= 0 00
8、00111 B -7补= 1 1111001 B,正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反;再对整个数加1,29,30,补码在微型机中是一种重要的编码形式,请注意:,1、 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。 2、 与原码、反码不同,数值0的补码只有一个,即 0补=00000000B。 3、若字长为8位,则补码所表示的范围为-128+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。,31,练一练:,1、十进制数 -29,写出它的原码,反码,补码? 2、十进制数 -15,写出它的原码,反码,补码?,原码: 最高位为符号位,其
9、余各位为数值本身的绝对值 反码: 正数:反码与原码相同 负数:符号位为1,其余位对原码取反 补码: 正数:原码、反码、补码相同 负数:最高位为1,其余位为原码取反;再对整个数加1,32,原码、反码、补码之间的转换,对于正数都一样,故不需要转换。 对于负数 反码原码,符号位不动,其余取反; 补码反码,减1; 补码原码,减1;符号位不动,取反或者符号位不动,其余取反;正数加1。,33,练一练:,1、已知补码:1001 1101,写出反码和原码。 反码:1001 1100 原码:1110 0011 2、已知补码:1100 1001,写出原码。 原码:1011 0111,34,主要内容,预备知识 常量
10、和变量的概念 各种数据类型的常量及变量 变量赋初值 不同类型数据之间的混合运算 常用运算符和表达式 输入函数与输出函数,35,3.2.1 C语言的基本元素,1、符号集 2、标识符 3、关键字,36,1、符号集,也叫字符集,包括如下五种:(1)大写字母A-Z;(2)小写字母a-z;(3)数字09;(4)下划线 _(5)标点符号和运算符,37,2、标识符,用来标识变量、常量、函数、文件的名字的字符序列。 构成规则: 由英文字母(大小写)或下划线开头; 其后跟着若干个英文字母、数字和下划线; 大小写敏感,不能以数字开头; 长度各个系统不同,一般不要超过8个字符;,38,例:判断下列标识符号合法性 s
11、um Sum M.D.John day Date 3days student_name #33 char ab _above $123 lotus_1_2_3,39,3、关键字,又称 保留字,是C语言中具有特定含义、专门用做语言特定成分的一类标识符。(P168) ANSI规定了32个关键字,(turbo c扩展了11个。) 例如: int 、float、char 注意: 1、所有的关键字都有特定用途,不能用作其他。 2、所有的关键字都必须小写。,40,3.2.2 常量 定义:程序运行时其值不能改变的量(即常数)。 分类:直接常量和符号常量1、直接常量: 整型常量,例如:30,7, 实型常量,例
12、如2.8,0.67 字符常量,例如 a 字符串常量,例如”word”,41,3.2.2 常量 定义:程序运行时其值不能改变的量(即常数)。 分类:直接常量和符号常量2、符号常量:用标识符代表常量 定义格式: #define 符号常量 常量 注意: 一般用大写字母 是宏定义预处理命令,不是C语句,42,例:符号常量举例,43,3.2.2 变量定义:程序运行时其值可以改变的量。 每个变量有一个名字:用标识符表示。 每个变量有一个存储空间(存储单元),该单元中的状态所表示的数为此时变量的值。 变量的使用:先定义,后使用,44,编译程序根据变量定义为其分配指定字节的内存单元。,45,3.2.2 变量-
13、其值可以改变的量,注意: 1、见名知义; 2、先定义,后使用; 3、一般使用小写字母。,变量定义的一般格式:数据类型 变量1,变量2,变量n;,例:int a=2,b,c=4;float data=3.67;char ch=A;,46,变量定义位置:一般放在函数开头,main() int a,b=2;float data;a=1;data=(a+b)*1.2;printf(“data=%fn”,data); ,变量定义,可执行语句,47,主要内容,预备知识 常量和变量的概念 各种数据类型的常量及变量 变量赋初值 不同类型数据之间的混合运算 常用运算符和表达式 输入函数与输出函数,48,3.3
14、各种数据类型的常量及变量,数据为什么要区分类型? 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类,49,数据类型总表,C 数 据 类 型,基本类型,构造类型,指针类型,空类型void,定义类型typedef,字符类型 char,整 型,实型,单精度型float,双精度型double,数组,结构体struct,共用体union,短整型short,长整型long,整型int,数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作,枚举,50,3.3.1 整数类型整型数据的标识符是 int 。分类:整形常量、整型变量。整型数据根
15、其加上的不同的限定词,则占用的内存字节数不同。,51,限定词:描述数据占用的内存字节数short(短整型),int ,long(长整型),short int long unsigned short (无符号短整型), unsigned int (无符号整型), unsigned long (无符号长整型),52,最小:-32768,unsigned int型:,最大:65535,00 00 00 00 00 00 00 00,最小:0,53,注意:,其中short和long的引入是为满足实际要求的不同长度的整数,而经unsigned限定词限定的整数总是正的。 short与int类型至少为16位
16、,而long类型至少为32位,并且,short类型不得长于int类型,而int类型不得长于long类型。 可用sizeof(类型标识符)测量。,54,整型常量(整常数) 三种形式: 十进制整数: 由数字09和正负号表示.如 123,-456,0 八进制整数: 由数字0开头,后跟数字07表示.如0123,011 十六进制整数: 由0x开头,后跟09,af,AF表示,如0x123,0Xff,问题: 0123 = ( )10 0x123 = ( )10 0Xff = ( )10,55,整型常量的类型 根据其值所在范围确定其数据类型: 在整常量后加字母l或L,认为它是long int 型常量 无符号数
17、也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。 例如: 358u,0x38Au,235Lu 均为无符号数;0XA5Lu表示十六进制无符号长整数A5,其十进制为165。,56,整型变量定义方法: int a1,a2;unsigned int b1,b2;一个整型常量只可以赋给能容纳下其值的整型变量。 如:a1,a2的取值范围为 -32768-32767b1,b2的取值范围为 0-65535 如果:a1=65535; 或者: b1=-1; 在内存中数值将不是所赋的数值。,57,3.3.2 实数类型 分类: 单精度(float) 双精度(double) 二者的区别在于所占存储位的多少,从
18、而决定了其取值范围。 一般float 占用32位(bits),double占用64位(bits)。,58,实型常量(实数或浮点数) 表示形式: 十进制数形式:由数字和小数点组成,小数点的左右至少一边要有数字。(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. 指数形式:由尾数、e或E和指数部分组成,E的两边都至少要有一位数且E的右边只允许是整数形式(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2,e-5, 1.2E-3.5,59,实型常量的类型 默认double型 在实型常量后加字母f或F,认为它是float型。,60,实型变量 实型变量的说明形
19、式如下: float 变量名1,变量名2, 变量名n; double 变量名1,变量名2, 变量名n; float:占4字节,提供7位有效数字 double:占8字节,提供1516位有效数字,例 : float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/,float a,b,c; double x,y;,61,例 实型变量的有效数字。 main( ) double a;a=6.152 367 864 359 046 178 294 901;printf(“n%25.20f“,a); 输出结
20、果为:6.15236786435904648000,?,62,对上一个例题的解释(参阅):在这个例子中,a被赋值了一个有效位数为25位的数字。但由于a是double类型的,所以a只能接收1516位有效数字。在printf语句中,我们使用了%25.20f这样的格式符号,这指示printf语句在输出a时总长度应为25位,小数点位数占20位。输出的结果显然显示了25位数,但只有6.152367864359046共16位有效数字被正确显示出来,后面的数字是一些无效的数值。这就表明double型的数据只接收1516位有效数字。,63,基本数据类型,整型,字符型,实型,有,无,说明:数据类型所占字节数随机
21、器硬件不同而不同,上表以IBM PC机为例。,64,3.3.3 字符类型字符型数据包含的是一个字符集。一般用的是ASCII码字符集 。 字符集中的每一个字符都有一个序号,称为ASCII码。 ASCII码大的字符比ASCII码小的字符值大。 字符类型的标识符是char。,aaa,65,字符常量 定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 A65, a97,048 , n10,如 a A ? n 101,aaa,66,字符常量 定义:用单引号括起来的单个普通字符或转义字符. 字符常量的值:该字符的ASCII码值 转义字符:反斜线后面跟一个字符或一个代码
22、值表示。,如 101 -A 012 -n376 - x61 -a60 -0 483 -(),aaa,67,转义字符,含义,n,v,r,a,ddd,t,b,f,“,xhh,转义字符,含义,换行,垂直制表,回车,响铃,单引号,3位8进制数代表的字符,水平制表,退格,换页,反斜线,双引号,2位16进制数代表的字符,转义字符:反斜线后面跟一个字符或一个代码值表示,68,字符型变量 char 变量名1,变量名2,变量名n;如:char c1,c2 ; 一个字符型变量的值只能是一个单个字符;在内存中占一个字节; 字符变量存放的是字符的ASCII码;,例 a=D; /* a=68; */x=A+5; /* x=65+5; */s=!+G /* s=33+71; */,69,字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志。,例 字符串“hello”在内存中,例 空串 “”,0,70,a,例 a,“a”,例: char ch;ch=“A”;,例: char ch;ch=A;,注:没有字符串变量,用字符数组存放。,71,例:将小写字母转化为大写字母。,72,基本数据类型,整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例。,73,74,待续、 3.4 变量赋初值,