[工程科技]第2章-C语言基本数据类型及运算课件.ppt
第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算第第2 2章章 C语言基本数据类型语言基本数据类型及运算及运算第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.1 C2.1 C语言的数据类型语言的数据类型 数据类型 基本类型 整型 实型 字符型 带符号整型(简称整型) 带符号短整型(简称短整型) 带符号长整型(简称长整型) 带符号整型 无符号整型 无符号整型 无符号短整型 无符号长整型 单精度型 双精度型 空类型 构造类型 指针型 枚举型 数组型 结构型 共用型 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.2 常量常量 常量是程序中其值不发生变化的数据。常量是程序中其值不发生变化的数据。 2.2.1 2.2.1 整型常量整型常量 进进 制制 数数 表表 示示 方方 式式 举举 例例 八进制整型八进制整型 由数字由数字0 0开头开头 034034,065065,057057十进制整型十进制整型 如同数学中的数字如同数学中的数字 123123,-78-78,9090十六进制整型十六进制整型 由由0X0X或或0 x0 x开头开头 0 0 x23,0Xff,0 xacx23,0Xff,0 xacp31p31第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算限制在本区间使用限制在本区间使用1基本整型常量和短整型基本整型常量和短整型-3276832767。 2长整型常量长整型常量-21474836482147483647,整数整数后面加上字母后面加上字母l(或或 L)。 3无符号整型常量表示的数据全部是正数,没无符号整型常量表示的数据全部是正数,没有符号位。有符号位。 int int , short intshort int,long int long int ,unsigned int unsigned int unsigned short intunsigned short int,unsigned long intunsigned long int第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算实型数又称实数或浮点数,实型数又称实数或浮点数,只用在十进制数中。只用在十进制数中。 表示法如下表示法如下: :3.14 .9999 -3.14159 3.14 .9999 -3.14159 0.30.3e05 6.89E-5 9.99e+16e05 6.89E-5 9.99e+166.89E-5 6.89E-5 表示表示的是数学算式中的的是数学算式中的:6.896.891010-5-5。类类 型型 二进制位数二进制位数 有效数字有效数字 数数 值值 范范 围围Float 32 7 Float 32 7 10 10-38-3810103838Double 64 15Double 64 1516 1016 10-308-3081010308308p31p31 2.2.2 实型常量实型常量 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算 2.2.3 字符常量字符常量 字符常量是用单引号括起来的一个字符,它在计算字符常量是用单引号括起来的一个字符,它在计算机存储中占一个字节。机存储中占一个字节。x,a,A,b,$,# x,a,A,b,$,# 2.2.4 2.2.4 符号常量符号常量定义格式为:定义格式为:#define 符号常量符号常量 字符串字符串 # #define PI 3.14159define PI 3.14159#define NULL 0#define NULL 0#define EOF 1#define EOF 1定义后当一般常量使用定义后当一般常量使用 p32p32第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.12.1】求一个圆柱体体积,用符号常量代替】求一个圆柱体体积,用符号常量代替。 #include stdio#include .h#define PI 3.14159#define PI 3.14159main()main() float r,h,v; float r,h,v; scanf scanf( (%f,%f%f,%f,&r,&h);,&r,&h); v= v=PIPI* *r r* *r r* *h;h; printf printf( (Volume=%fVolume=%f,v);,v); 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.2.5 字符串常量字符串常量 字符串常量是用一对双引号括起来的零个或多个字符序列。字符串常量是用一对双引号括起来的零个或多个字符序列。 “I am a studentI am a student“ ,”x x“ ,” 都为字符串常量。都为字符串常量。在内存中存储时,设定一个结束符在内存中存储时,设定一个结束符0。字符串的长度应为实际长度。字符串的长度应为实际长度。注意:注意: 0和和0不同,不同,0是编码为是编码为0的字符,的字符, 而而0则是数字则是数字 0 所对应的字符所对应的字符 在字符串中有转义字符。在字符串中有转义字符。例如:例如:“ab072cdef” 长度为长度为7 ; “n33abcd” 长度为长度为8第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.3 2.3 变量变量 变量是指在程序运行过程中其值可以发生变化的量。变量是指在程序运行过程中其值可以发生变化的量。 2.3.1变量的数据类型变量的数据类型及其定义及其定义1.1.变量的数据类型变量的数据类型( (基本基本) ) 字符型、整型、单精度实型、双精度实型,它们字符型、整型、单精度实型、双精度实型,它们分别用关键字分别用关键字char、int、float、double进行定义。进行定义。另外,还有无符号整型和无值型,它们分别用关键另外,还有无符号整型和无值型,它们分别用关键字字unsigned和和void进行定义。进行定义。见表见表2,2,表表3 3 p33第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算数据类型数据类型 变量列表;变量列表; 系统默认类型系统默认类型intint int int a, b, c a, b, c; char ch, strchar ch, str; double f_1, f_2double f_1, f_2; float x, y, z, _w1, _w2float x, y, z, _w1, _w2;unsigned intunsigned int u_1, u_2 u_1, u_2; long intlong int g1, g2 g1, g2;第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.3.2 2.3.2 变量的存储类型及定义变量的存储类型及定义1. 变量的存储类型变量的存储类型 CPU寄存器寄存器 ( (registerregister) ) 内存内存 ( (内存中又分为两个区域,即为静态存储区内存中又分为两个区域,即为静态存储区和动态存储区。和动态存储区。) )2. 2. 变量的存储类型的定义变量的存储类型的定义 存储类型存储类型 数据类型数据类型 变量列表;变量列表; 系统默认类型修饰为系统默认类型修饰为auto 类型(自动型)类型(自动型) p34p34 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(1) 自动变量自动变量 intint a, b, c a, b, c; char ch, strchar ch, str; double f_1, f_2double f_1, f_2; float x, y, z, _w1, _w2float x, y, z, _w1, _w2;unsigned intunsigned int u_1, u_2 u_1, u_2; long intlong int g1, g2 g1, g2;第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.22.2】定义自动整型和字符型变量。】定义自动整型和字符型变量。# #includestdioinclude.hmain()main() auto char c1,c2; auto int auto char c1,c2; auto int i1,i2; i1,i2; scanf scanf( (%d,%d%d,%d,&i1,&i2);,&i1,&i2); c1=i1; c2=i2; c1=i1; c2=i2; printf printf( (%c,%cn%c,%cn,c1,c2);,c1,c2); printf printf( (%d,%dn%d,%dn,c1,c2);,c1,c2); 运行时输入:运行时输入:9797,9898运行结果为:运行结果为:a,ba,b 97,98 97,98第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算寄存器型变量的数据是存放在寄存器型变量的数据是存放在CPU 的通用寄存器中,的通用寄存器中,可不通过内存来直接访问。可不通过内存来直接访问。Turboc C允许定义的寄允许定义的寄存器型变量一般以存器型变量一般以2个为宜。动态管理使用个为宜。动态管理使用.【例【例2.32.3】函数内部定义寄存器变量。】函数内部定义寄存器变量。# #include stdioinclude .hmain()main() register b; b=3; register b; b=3; printf printf( (b=%db=%d,b);,b); 运行结果为:b=3第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(3) (3) 静态变量静态变量 静态变量存放在静态内存数据区中静态变量存放在静态内存数据区中特点特点: :静态变量在变量定义时就分配了固定的内存单元并根静态变量在变量定义时就分配了固定的内存单元并根据所定义的数据类型存入默认值,在程序运行中一直占用内据所定义的数据类型存入默认值,在程序运行中一直占用内存单元不释放,直到程序运行结果后。存单元不释放,直到程序运行结果后。分类分类: :静态变量又分为静态局部变量和静态全局变量。静态变量又分为静态局部变量和静态全局变量。 静态局部变量静态局部变量 在函数或复合语句中定义的变量为静态变量称为静态局在函数或复合语句中定义的变量为静态变量称为静态局部变量部变量. .特点特点: :该变量在其函数中或复合语句中有效。静态局部变量该变量在其函数中或复合语句中有效。静态局部变量所在的函数无论调用多少次,所在的函数无论调用多少次,静态局部变量赋值语句只执行静态局部变量赋值语句只执行一次一次,但能够保留住函数多次调用的中间结果。,但能够保留住函数多次调用的中间结果。p35p35第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.42.4】静态局部变量的使用】静态局部变量的使用f()f() static intstatic int a=1; a=1; auto b=0; auto b=0; a=a+1; a=a+1; b=b+1; b=b+1; printf printf( (a=%d,b=%dna=%d,b=%dn,a,b);,a,b); 运行结果为:运行结果为: a=2,b=1a=2,b=1a=3,b=1a=3,b=1a=4,b=1a=4,b=1main()main() f(); f(); f(); f(); f(); f(); 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算 静态全局变量静态全局变量【例【例2.52.5】有一程序文件】有一程序文件f1.c,f1.c,在程序中使用了静态全局在程序中使用了静态全局变量。变量。# #include stdioinclude .hstatic intstatic int a=1; a=1;main() main() auto b=0; auto b=0; a=a+1; a=a+1; b=b+1; b=b+1; printf printf( (nana=%d,b=%dn=%d,b=%dn,a,b);,a,b); 运行结果为:运行结果为:a=2,b=1 a=2,b=1 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(4) (4) 外部变量外部变量TubroTubro C C系统规定在某一个源程序中定义的全局变量,其它系统规定在某一个源程序中定义的全局变量,其它的多个文件可以使用,这就是所说的程序间的数据交流。的多个文件可以使用,这就是所说的程序间的数据交流。 定义方法定义方法: :使用关键字使用关键字“extern”extern”定义的变量称为外部变量定义的变量称为外部变量(系统默认存储类型),在函数体之外定义。(系统默认存储类型),在函数体之外定义。注意注意: :如果全局变量如果不加如果全局变量如果不加“static”static”限制,都是外部变限制,都是外部变量。量。外部和内部变量同名的处理外部和内部变量同名的处理: : 外部变量如果与局部变量同名,在局部范围内局部变量外部变量如果与局部变量同名,在局部范围内局部变量优先。(具体应用见第优先。(具体应用见第5 5章)章)p37p37第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算变量定义可以出现在程序中的三个地方:变量定义可以出现在程序中的三个地方: 在函数的内部在函数的内部 在函数的参数中在函数的参数中 在所有函数的外部在所有函数的外部2.3.3 变量的初始化变量的初始化存储类型符存储类型符 数据类型符数据类型符 变量变量1=1=初值初值1 1,变量,变量2=2=初初值值2 2 ;static int a=1; auto intstatic int a=1; auto int a=0,b=-3; a=0,b=-3; p37p37第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算 2.3.4 2.3.4 基本数据类型的使用基本数据类型的使用1. 1. 整型变量整型变量【例【例2.62.6】内存单元中同一个数据按有符号和无符号格式】内存单元中同一个数据按有符号和无符号格式输出的情况。输出的情况。# #include stdioinclude .hmain()main() unsigned int unsigned int a=65535; a=65535; int int b=a; b=a; printf printf( (a=%una=%un,a);,a); printf printf( (b=%dnb=%dn,b);,b); printf printf( (a=%d,%o,%x,%una=%d,%o,%x,%un,a,a,a,a);,a,a,a,a); p37p37运行结果为:运行结果为:a=65535a=65535b=-1b=-1a=-a=-1,177777,ffff1,177777,ffff,65535,65535第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.72.7】超出基本整型数据的最大允许值。】超出基本整型数据的最大允许值。# #include stdioinclude .hmain()main() int int a,b; a,b; a=32767; a=32767; b=32768; b=32768; printf printf( (%d,%d%d,%d,a,b);,a,b); p38p38第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算实型变量分为单精度(实型变量分为单精度(floatfloat型)、双精度(型)、双精度(doubledouble型)型)和长双精度型(和长双精度型(long doublelong double型)型)【例【例2.8】输出双精度数。】输出双精度数。# #include stdioinclude .hmain()double x,y; main()double x,y; x=1111111111111.111111111; x=1111111111111.111111111; y=2222222222222.222222222;y=2222222222222.222222222; printf printf( (%fn%fn,x+y);,x+y); 实型变量实型变量 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算字符字符型变量型变量 字符型变量在计算机内存储的是其字符对应的字符型变量在计算机内存储的是其字符对应的ASCIIASCII码值码值. .例如:例如:char c1=A; 例例2.92.9】输入英文字母】输入英文字母A,转换成小写字母输出。,转换成小写字母输出。# #include stdioinclude .hmain()main() char c1,c2; c1=getchar( ) char c1,c2; c1=getchar( ) putchar(c1); c2=c1+32; putchar(c1); c2=c1+32; putchar putchar(c2);(c2); 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5 运算符及表达式运算符及表达式 C 语言运算符 图 2.5 C 语言运算符分类 基本运算符 条件运算符( ? : ) 基本算术运算符( +,-,*,/,% ) 增 1 减 1 运算符( +,- ) 基本赋值运算符( = ) 关系运算符( ,=,=,!= ) 逻辑运算符( !,&,| ) 算术自反赋值运算符( +=,-=,*=,/=,%= ) 位逻辑运算符( ,&,|, ) 指针运算符 赋值运算符 逗号运算符( , ) 专用运算符 成员运算符 强制运算符 下标运算符 数据长度运算符( sizeof ) 位运算符 算术运算符 位移位运算符( ) 位自反赋值运算符( &=,|=,=,= ) p40第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.4.1 算术运算符和算术表达式算术运算符和算术表达式 算术运算包括加、减、乘、除和求余运算。分别使用:算术运算包括加、减、乘、除和求余运算。分别使用:+ 、- 、* 、/ 、% 表示。表示。 见见 P41P41【例【例2.102.10】求两个整数相除的余数。】求两个整数相除的余数。# #include stdioinclude .hmain()main() printf printf( (%d,%d,%d,%d%d,%d,%d,%d,7%3,7%(-3),-7%3,-7%(-3);,7%3,7%(-3),-7%3,-7%(-3); 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5.2 2.5.2 关系运算符和关系表达式关系运算符和关系表达式关系运算是用来进行两个操作对象的比较的运算,关系运算关系运算是用来进行两个操作对象的比较的运算,关系运算的运算结果是一个逻辑值,即的运算结果是一个逻辑值,即“真真”值或值或“假假”值。如果结值。如果结果为果为“真真”值,用数字值,用数字“1”1”来表示,如果结果为来表示,如果结果为“假假”值,值,则用数字则用数字“0”0”表示。表示。p41p41语言提供语言提供6 6种关系运算符:种关系运算符: (小于小于) ) =() (大于大于) ) =(=(大于或等于大于或等于) =() =(等于等于) !=() !=(不等于不等于) )见附录见附录2p251第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算关系运算符的优先级关系运算符的优先级: : 低于算术运算符低于算术运算符 前前4 4种关系运算符种关系运算符(、= 、=)=)的优先级相同,后的优先级相同,后2 2种种(=,!=)(=,!=)也相同。且前也相同。且前4 4种的优先级高于后种的优先级高于后2 2种。种。 a+bb+ca+bb+c 相当于相当于 ( (a+b)(b+c)a+b)(b+c) a=bc a=bc 相当于相当于a=(bc) a=(b3 x3 (3 3)35=6835=6b)(ab)&(cd)&(cb)(ab)|(cd)|(c= = = &= = |= 复合赋值运算符复合赋值运算符2 2赋值表达式赋值表达式赋值表达式赋值表达式-由赋值运算符或自反赋值运算符构成由赋值运算符或自反赋值运算符构成(1 1)赋值表达式格式:)赋值表达式格式: = a=1 a=1 , b=5b=5* *PIPI, c=c=a第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(2 2)复合赋值运算符)复合赋值运算符+= -= += -= * *= /= %= /= %=复合赋值运算表达式格式:复合赋值运算表达式格式: = 例如:例如:a-=b-5a-=b-5 相当于:相当于:a=a-b-5a=a-b-5a%=b+3 a%=b+3 相当于:相当于:a=a%b+3a=a%b+3p45p45第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5.5 2.5.5 逗号运算符和逗号表达式逗号运算符和逗号表达式表达式表达式1,表达式,表达式2,表达式表达式n 逗号表达式是一个求值运算符。计算时顺序为逗号表达式是一个求值运算符。计算时顺序为分别求解每一个表达式,整个表达式的值是最分别求解每一个表达式,整个表达式的值是最右边表达式的值。右边表达式的值。 a=8+4,a/2 a=12a=12,6 ,6 表达式的结果表达式的结果:6:6a=12a=12p45p45第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5.6 变量的自增变量的自增,自减(自减(+,-)运算符)运算符 变量变量+ + + + + + 变量变量 变量变量 - - - - - - - - 变量变量 p46p46a+ +a a- - aa+ +a a- - a使用使用“+ +”+ +”和和“- -”- -”运算时需要注意以下问题:运算时需要注意以下问题:(1 1)+和和- - -运算只能用于运算只能用于变量变量,而不能用于常量和表达式。,而不能用于常量和表达式。(2 2)+和和- - -运算是单目运算符,运算是单目运算符,运算方向是自右向左运算方向是自右向左。 【例【例2.112.11】 变量的自增自减运算变量的自增自减运算 main()main() int int x=10 x=10 printf printf( (%dn%dn,-x+); ,-x+); printf printf( (%dn%dn,x); ,x); 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(3)(3)在表达式中包含在表达式中包含+或或-算时,很容易出错,请算时,很容易出错,请读者注意。读者注意。例如:例如: i+j i+j 应该写成:应该写成:( (i+)i+)+ +(+j)(+j) i+j i+j 应写成:应写成:( (i+)i+)+j+j(4)(4) Turbo C Turbo C 规定函数的实参求值顺序是自右向左。规定函数的实参求值顺序是自右向左。 例如:例如:i i 的值为的值为3;3;则执行:则执行: printfprintf( (%d,%dn%d,%dn,i,i+);,i,i+); 在函数中在函数中 4 4,3,3第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.122.12】观察中间变量】观察中间变量j j的值。的值。 main()main() int int i=3,j; i=3,j; j=i+; j=i+; printf printf( (i=%d,j=%dni=%d,j=%dn,i,j);,i,j); 2.5.72.5.7长度运算符长度运算符 sizeosizeof f运算符的格式为:运算符的格式为: sizeofsizeof(类型说明符类型说明符) sizeofsizeof ( (表达式表达式) )第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.132.13】长度运算符的使用】长度运算符的使用# #include stdioinclude .hmain() main() int int i; i; short s; short s; unsigned u; unsigned u; long int long int l; l; float f; float f; char ch char ch; ; double d; double d; printfprintf( (%d,%d,%d,%d,%d,%d,%d%d,%d,%d,%d,%d,%d,%d,sizeof(i),sizeof(s),s,sizeof(i),sizeof(s),sizeof(u),sizeof(l),sizeof(f),sizeof(ch),sizeofizeof(u),sizeof(l),sizeof(f),sizeof(ch),sizeof(d) (d) 运行结果为:运行结果为: 2,2,2,4,4,1,82,2,2,4,4,1,8第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5.8 2.5.8 位运算符和位运算表达式位运算符和位运算表达式1 1位逻辑运算符位逻辑运算符按位非运算符按位非运算符 按位与运算按位与运算 按位或运算按位或运算 按位异或运算按位异或运算 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算1 1位逻辑运算符位逻辑运算符位运算是一种对运算对象按二进制位进行运算。位运算是一种对运算对象按二进制位进行运算。位运算不允许只操作二进制数其中的某一位,而位运算不允许只操作二进制数其中的某一位,而是对整个数据按二进制位进行运算。是对整个数据按二进制位进行运算。按位逻辑运算符的优先级由高至低排列按位逻辑运算符的优先级由高至低排列 & & | |(1)(1) 按位非运算符按位非运算符“”是单目运算符,它的优先级比非单目的算术运算符、是单目运算符,它的优先级比非单目的算术运算符、关系运算符、逻辑运算符和其它位运算符都高。关系运算符、逻辑运算符和其它位运算符都高。按位非运算按位非运算规则是:将二进制的数字规则是:将二进制的数字0 0变变1 1,1 1变变0 0。例如:设:例如:设:a=00000011 a=00000011 则:则:a a=11111100=11111100p48第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(2)(2) 按位与运算按位与运算 按位与运算的规则是按位与运算的规则是: :两个操作对象均为两个操作对象均为1 1时,则该时,则该位结果为位结果为1 1,否则为,否则为0 0。例如:例如: 设:设:a和和b均为无符号整型变量均为无符号整型变量,且且a=3 (00000011),b=5 (00000101),进行进行按位与运算按位与运算: 00000011 (a=3)(&) 00000101 (b=5) 00000001 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(3)(3) 按位或运算按位或运算按位或运算的规则是按位或运算的规则是: :两个操作对象相异时,则该两个操作对象相异时,则该位结果为位结果为1 1,相同时否则为,相同时否则为0 0。例如:例如:设:设:a和和b均为无符号整型变量均为无符号整型变量,且且a=3 (00000011), b=5 (00000101),进行按位或:,进行按位或: 00000011 (a=3)(|) 00000101 (b=5) 00000110 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(4)(4) 按位异或运算按位异或运算按位或运算的规则是按位或运算的规则是: :两个操作对象有一个为两个操作对象有一个为1 1时,时,则该位结果为则该位结果为1 1,否则为,否则为0 0。例如:例如:设:设:a和和b均为无符号整型变量均为无符号整型变量,且且a=3 (00000011), b=5 (00000101),进行按位或:,进行按位或: 00000011 (a=3)(|) 00000101 (b=5) 00000110第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算【例【例2.142.14】设】设a a和和b b均为无符号整型变量均为无符号整型变量, ,且且a=3a=3(取低字节为(取低字节为0000001100000011), b=5 (, b=5 (取低字节为取低字节为00000101),00000101),进行按位非、按位进行按位非、按位与、按位或、按位异或运算。与、按位或、按位异或运算。 # #include stdioinclude .h main() main() int int a=3,b=5;a=3,b=5; printf printf( (a=%dna=%dn, , a);a); printf printf( (a&b=%dna&b=%dn,a&b);,a&b); printf printf( (a|b=%dna|b=%dn,a|b);,a|b); printf printf( (ab=%dnab=%dn,ab);,ab); 运行结果为:运行结果为:a=-4a=-4a&b=1a&b=1a|b=7a|b=7a ab=6=6第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2. 2. 位移运算符位移运算符 p49p49位移运算符是将以二进制数据形式表现的字符型或整型变量位移运算符是将以二进制数据形式表现的字符型或整型变量中的每一位,左移或右移若干位中的每一位,左移或右移若干位. .位移运算符有两种位移运算符有两种: :分别是分别是“”,均为双目运算。,均为双目运算。位移运算符的表达式形式是:位移运算符的表达式形式是:表达式表达式111表达式表达式2 2其中,在格式中的表达式其中,在格式中的表达式1 1是位移的对象,即二进制数,表是位移的对象,即二进制数,表达式达式2 2是移动的二进制位数,用十进制数表示。是移动的二进制位数,用十进制数表示。用途用途:(1)移位运算可用于对外部设备的输入进行译码,也)移位运算可用于对外部设备的输入进行译码,也可用于读状态信息。按位运算符常用于加密程序。可用于读状态信息。按位运算符常用于加密程序。(2)移位运算还可以用非常快的速度实现整数乘法和除法)移位运算还可以用非常快的速度实现整数乘法和除法运算,左移运算,左移1位实现乘位实现乘2运算,右移运算,右移1位实现除位实现除2运算。运算。第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算(1 1)左移运算)左移运算运算法则运算法则: :左移运算是内存单元中的二进制数整左移运算是内存单元中的二进制数整体向左移动。左移体向左移动。左移1 1位相当于该数位相当于该数乘以乘以2 2. .规则规则: :高位溢出高位溢出,低位低位补补0 0。(2 2)右移运算)右移运算运算法则运算法则: :右移运算是内存单元中的二进制数整右移运算是内存单元中的二进制数整体向右移动。右移体向右移动。右移1 1位相当于该数位相当于该数除以除以2 2. .规则规则: :低位丢弃,补高位。低位丢弃,补高位。补位规则补位规则: 移出的空位若是移出的空位若是0 0则全补则全补0,0,若是若是1 1则全则全部补部补1.1.p50p50第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算 【例【例2.15】左移、右移运算举例。】左移、右移运算举例。# #include stdioinclude .hmain()main()unsigned a=64,b=127;unsigned a=64,b=127;intint i=32767,j=-32768; i=32767,j=-32768;printfprintf( (a1=%d,a2=%dna1=%d,a2=%dn,a1,a2);,a1,a2);printfprintf( (b1=%d,b2=%dnb1=%d,b2=%dn,b1,b2);,b1,b1=%d,i2=%dni1=%d,i2=%dn,i1,i2);,i1,i2);printfprintf( (j1=%d,j2=%dnj1=%d,j2=%dn,j1,j2);,j1,j2);运行结果为:运行结果为:a1=128,a2=256a1=128,a2=256b1=254,b2=508b1=254,b1=16383,i2=8191i1=16383,i2=8191j1=-16384,j2=-8192j1=-16384,j2=-8192第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5.9 2.5.9 混合运算和类型转换混合运算和类型转换 double 图 2.6 不同类型数据的转换 long int unsigned char,short float 高 低 第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算1. 1. 自动类型转换自动类型转换由系统自动完成并向精度高的类型转换。例如表达式:由系统自动完成并向精度高的类型转换。例如表达式: 10+10+a a+1.5-5678.444+1.5-5678.444* *b b 2. 2. 强制类型转换强制类型转换强制类型转换将表达式的值转换为另一种特定类型。强制类型转换将表达式的值转换为另一种特定类型。格式:格式:(类型)表达式(类型)表达式例如例如: : float x=3.6;float x=3.6; int y=(intint y=(int)x ;)x ;结果分析结果分析: :变量变量x x 的内存单元中存放的还是实数的内存单元中存放的还是实数3.3.6 6,而变量而变量y y只取只取x x的整数部分。的整数部分。第第2 2章章 C C语言基本数据类型及运算语言基本数据类型及运算2.5.10 2.5.10 综合运算举例综合运算举例【例【例2.16】输出各种类型数据。】输出各种类型数据。#include stdio#include .h main() main()intint a=5,b=7;float x=67.8564,y=-789.124; a=5,b=7;float x=67.8564,y=-789.124;char c=char c=A A;long n=1234567;unsigned u=65535;long n=1234567;unsigned u=65535;printfprintf( (%d%dn%d%dn,a,b);printf,a,b);printf( (%3d%3dn%3d%3dn,a,b);,a,b);printfprintf( (%f,%fn%f,%fn,x,y);printf,x,y);printf( (%-10f,%-10fn%-10f,%-10fn,x,y);,x,y);printfprintf( (%8.2f,%8.2f,%.4f,%.4f,%3f,%3fn%8.2f,%8.2f,%.4f,%.4f,%3f,%3fn,x,y,x,y,x,y);,x,y,x,y,x,y);printfprintf( (%e,%10.2en%e,%10.2en,x,y);,x,y);printfprintf( (%c,%d,%o,%xn%c,%d,%o,%xn,c,c,c,c);,c,c,c,c);printfprintf( (%ld,%lo,%xn%ld,%lo,%xn,n,n,n);,n,n,n);printfprintf( (%u,%o,%x,%dn%u,%o,%x,%dn,u,u,u,u);,u,u,u,u);printfprintf( (%s,%5.3sn%s,%5.3sn, ,COMPUTERCOMPUTER, ,COMPUTERCOMPUTER););第第2 2章章