《C语言程序ch2数据类型运算符与表达式》由会员分享,可在线阅读,更多相关《C语言程序ch2数据类型运算符与表达式(55页珍藏版)》请在金锄头文库上搜索。
1、第二章第二章数据类型、运算符与表达式1本章要点l 数据的描述规则l 数据的操作规则2 基本符号基本符号 数据数据类类型型运算符和表达式运算符和表达式数据数据类类型型转换转换自增运算和自减运算自增运算和自减运算位运算位运算主要内容3程序程序设计语设计语言的基本言的基本规则规则包括包括l 常数常数l 变变量量l 运算符运算符l 表达式表达式l 函数函数什么是什么是语语言言规则规则?为为什么要有什么要有这这些些规则规则? 把自然把自然语语言描述言描述问题问题的方式的方式转换转换为为C C语语言的形式表达言的形式表达给计给计算机算机表达式表达式常数变变量量函数函数运算符运算符4 常数的存放空常数的存放
2、空间间是否相同?是否相同? 变变量量a a如何表示?如何存放?如何表示?如何存放? 计计算机如何知道之算机如何知道之间间的关系?的关系? 和和sin xsin x 如何如何输输入?如何存放?入?如何存放? 计计算机如何算机如何识别识别“=”“=”?运算?运算结结果放在果放在哪里?哪里?计计算机完成上述算机完成上述计计算,首先要算,首先要解决数据的解决数据的输输入入和和存放存放问题问题问题5程序的任程序的任务务是是对对数据数据进进行行处处理,理,数数据是程序据是程序处处理的理的对对象象,而运算符是,而运算符是施加施加给这给这些数据的操作。些数据的操作。 数据和运算符是表达式的基本元素数据和运算符
3、是表达式的基本元素数据的存数据的存储储数据的操作数据的操作程序程序62.1 C2.1 C语语言言的基本的基本符号符号1. C1. C语语言言的基本字符集的基本字符集l 数数 字字:0 1 2 3 4 5 6 7 8 9l 字字 母母:a b c z A B C Zl 运运 算算 符符:+ - * / % = = != = & | & | ( ) - . ! ? : , ; “ l 特殊符号:特殊符号:_(下划下划线线) 回回车车(r) 换换行行(n) 制表符制表符(t)ASCIIASCII字符集字符集 基本字符集基本字符集7名称名称2. C语语言言的的标识符符基本基本标识标识符:符:变变量名、
4、函数名、文件名、量名、函数名、文件名、 数数 组组名、名、类类型名型名规则规则:字母或下划:字母或下划线线开开头头,后面是字母、,后面是字母、 下划下划线线或数字或数字call_n test39 _string1 abc 例例8auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeofstatic structswitch typedef union unsigned voidvolatile w
5、hile保留字(保留字(3232个)个)3. C语语言言的关的关键字字用用户户不能用关不能用关键键字作字作标识标识符!符!94. 常量常量在程序运行中,其在程序运行中,其值值保持不保持不变变的量称的量称为为常量常量。常量的表示方法常量的表示方法:数数值值常量常量 符号常量符号常量 用一个符号代表一个常量用一个符号代表一个常量 必必须须先定先定义义后使用后使用,习惯习惯用用大写大写字母表示。字母表示。 main( ) float r,l,s; r=2; l=2*PI*r;s=PI*r*r; printf(“l=%d, s=%d”, l,s); 10在程序在程序执执行期行期间间其其值值可以改可以改
6、变变的量。的量。l有关有关变变量的量的规规定定u 变变量通量通过变过变量名量名标识标识,变变量名和内存中量名和内存中的存的存储单储单元相元相对应对应。编编写程序写程序时时通通过变过变量量名来存、取存名来存、取存储单储单元。元。u 变变量必量必须须先定先定义义,后使用。,后使用。变变量量memorya88 81000H1000H1001H1001H1002H1002H255255121211命名命名规则规则: 变变量名由量名由标识标识符表示,只能由符表示,只能由字母字母、数字数字和和下划下划线线三种字符三种字符组组成,且第一个字符必成,且第一个字符必须须为为字母字母或或下划下划线线。 例如:下列
7、例如:下列标识标识符中,不合法的符中,不合法的变变量名有:量名有: M.D.John 12%gf 1add _ce36 age& 5thclass lotus-1-2-3 cd*ef 说说明:明: *变变量要量要“先定先定义义,后使用,后使用” 定定义义格式格式:类类型型说说明符明符 标识标识符符1, ,1, ,标识标识符符n n 例如:例如:int x, y, z; float a, b, c, d; *选变选变量名量名时时,要做到,要做到“见见名知意名知意” 例如:例如:name , st_age , xm , nl , class , sum12 许许多程序多程序设计语设计语言都把它言都
8、把它们们能能处处理的数据分理的数据分成若干成若干类类,这这些些类类就是数据就是数据类类型。型。 为为什么要划分数据什么要划分数据类类型?型? 不同不同类类型的数据在型的数据在计计算机内表示不同;算机内表示不同; 不同不同类类型的数据能型的数据能执执行的运算不同;行的运算不同; 计计算机能算机能处处理的理的问题问题中的数据是广中的数据是广义义的。的。2.2 C语言数据类型13 C语语言数据言数据类类型型: 整型整型 字符型字符型 单单精度型精度型 算算术类术类型型 实实型(浮点型)型(浮点型) 基本基本类类型型 枚枚举类举类型型 双精度型双精度型 指指针类针类型型数据数据类类型型 数数组组 构造
9、构造类类型型 结结构体构体类类型型 共用体共用体类类型型规定:在程序中用到的数据,必须指定数据类型。14 整型常量的不同数整型常量的不同数值值表示方法表示方法十十进进制数:制数:0 09 9八八进进制数:制数:0 07 7,以,以0 0开开头头十六十六进进制数:制数:0 09 9,A AF/aF/af f,以以0 0x x或或0X0X开开头头 例如例如例如例如: 100: 100: 100: 100、-8-8-8-8、0 0 0 0;010010010010、024024024024;0x180x180x180x18、0X1F0X1F0X1F0X1F整型常量的整型常量的类类型型w根据根据值值大
10、小默大小默认类认类型型例:例: 32767 32767的的类类型是型是intint,3276932769类类型是型是long long 。w在常量后面加在常量后面加l l或或L L,表示,表示long intlong int型型 例:例:123L123L,0L0L,432l 432l 都是都是long intlong int型常量型常量2.2.1 整型数据15l整型整型变变量的量的形式形式共六种共六种基本整型基本整型短整型短整型长长整型整型无符号整型无符号整型无符号短整型无符号短整型无符号无符号长长整型整型int int short int short int long intlong int
11、unsigned intunsigned intunsigned short unsigned short unsigned longunsigned long在内存中占字在内存中占字节节数数(与所与所选选系系统统有关有关)占内存字占内存字节节数数2 22 24 42 22 24 4 ANSI C ANSI C标标准没有准没有规规定各定各类类数据所占内存的字数据所占内存的字节节数,只要数,只要求求longlong型数据不短于型数据不短于intint型,型,shortshort型不型不长长于于intint型。型。VC+VC+规规定:定:shortshort型占型占2 2个字个字节节,intint
12、和和longlong都占都占4 4个字个字节节。16l整型整型变变量的定量的定义义例:int i, j; long k, m; unsigned int x,y;变变量有量有值吗值吗?格式:格式:类类型型说说明符明符 变变量列表;量列表;C中的所有中的所有变变量必量必须须先定先定义义后使用!后使用!既不指定既不指定既不指定既不指定signed,signed,signed,signed,也不指定也不指定也不指定也不指定unsigned,unsigned,unsigned,unsigned,则隐则隐则隐则隐含含含含为为为为有符号(有符号(有符号(有符号(signed)signed)signed)s
13、igned)17 类类型型 类类型型说说明符明符 长长度度 数的范数的范围围基本型基本型 int 2 int 2字字节 -32768-327683276732767短整型短整型 short 2 short 2字字节 -2-215152 21515-1 -1 长长整型整型 long 4 long 4字字节 -2-231312 23131-1-1无符号整型无符号整型 unsigned int 2 unsigned int 2字字节 0 06553565535无符号短整型无符号短整型 unsigned short 2 unsigned short 2字字节 0 06553565535无符号无符号长长
14、整型整型 unsigned long 4 unsigned long 4字字节 0 0(2 23232-1-1)j j、m m、x x 所占存存储储容容量和取量和取值值范范围围? 例:例: int i, j; long k, m; long k, m; unsigned int x,y;18intint型数的表示范型数的表示范围围: :存存储长储长度度1616位二位二进进制制(2B) (2B) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 0 0
15、0 0 0 0 0 0 0 0 0 0 0 0=1=1=3=3最大的最大的负负数?数?=-2=-21515=-32768=-32768l l 定点二定点二进进制制补码补码表示表示l l 占占2 2个字个字节节存存储储l l 数的表示范数的表示范围围:-32768-327683276732767a=2=21515-1=32767-1=32767最大的正数?最大的正数?19例例:main() int a,b,c; a=32767; b=3; c=a+b; printf(c=%dn,c); 程序运行程序运行结结果溢出(果溢出(负负数)数) c=-327661 0 0 0 0 0 0 0 0 0 0
16、0 0 0 1 0C-32766的的补码补码形式形式20实实型型变变量分量分类类:单单精度、双精度和精度、双精度和长长双精度型。双精度型。 2.2.2 2.2.2 实实型数据型数据实实型型变变量的有关量的有关规则规则:例例例例: float a,b; float a,b; double c,d; double c,d; long double e,f; long double e,f; 212 2-23-23 = | = |尾数尾数| = 1-2| = 1-2-23-23 二二二二进进进进制制制制 7 7 7 7位位位位 二二二二进进进进制制制制 23 23 23 23位位位位单单单单精度精度
17、精度精度实实实实型型型型尾数尾数尾数尾数阶码阶码阶码阶码阶阶阶阶符符符符数符数符数符数符实实型数据在内存中的存放形式:型数据在内存中的存放形式:1 1个字个字节节 3 3个字个字节节 例如例如 10-2在在计计算机中的存放形式算机中的存放形式为为: + 0.123456 数符数符指数符号指数符号指数指数 - 2小数小数小数部分小数部分指数部分指数部分实实型数据按指数形式存型数据按指数形式存储储。一个。一个实实型数据分成小数和指数型数据分成小数和指数部分分部分分别别存放。指数部分采用存放。指数部分采用规规格化的指数形式。格化的指数形式。22 其中,小数部分一般都采用其中,小数部分一般都采用规规格
18、化的数据形式,格化的数据形式,即:小数点放在第一个有效数字前面,使小数部分即:小数点放在第一个有效数字前面,使小数部分放小于放小于1的的纯纯小数。小数。l 单单精度精度实实数数的的精度精度取决于小数部分的取决于小数部分的2323位二位二进进制数位所能表达的数制数位所能表达的数值值位数,将其位数,将其转换为转换为十十进进制,制, 最多可表示最多可表示7 7位十位十进进制数制数字,所以字,所以单单精度精度实实数的有效位是数的有效位是7 7位。位。l 双精度型双精度型用于用于扩扩大存大存储储位数,目的是增位数,目的是增加加实实数的数的长长度,减少累度,减少累积误积误差,改善差,改善计计算算精度。精度
19、。232. 实型常量型常量 (实实实实型常数不区分型常数不区分型常数不区分型常数不区分单单单单精度和双精度)精度和双精度)精度和双精度)精度和双精度)l 两种表示形式:两种表示形式:十十进制数形式:制数形式:由数字和小数点及正由数字和小数点及正负号号组成。成。 (注意:必注意:必须有小数点有小数点) 例如:例如:23.678 .678 23.23.678 .678 23.指数形式:指数形式:由数字、小数点、字母由数字、小数点、字母e或或E及正及正负号号组成。成。(注:注:e或或E之前必之前必须有数字,且后指数必有数字,且后指数必须为整数整数) 例如:例如:3.5E-5 2e3 3.5E-5 2
20、e3 E2 3.6e3.5 .e6 e E2 3.6e3.5 .e6 e 不合法!2乘以10的3次方,即2000242.2.3 字符型数据1. 字符常量字符常量 用用单单引号括起来的一个字符(引号括起来的一个字符( 只能包含一个字符)只能包含一个字符) 例如:例如: a A $ ! abc、“a” 注注: a与与A是是 不同的字符常量。不同的字符常量。25转义转义字符:字符:l 转义转义字符的概念:字符的概念:是一种特殊的字符常是一种特殊的字符常量,用于表示常用的、但却量,用于表示常用的、但却难难以用一般形以用一般形式表示的不可式表示的不可显显示字符。示字符。l 转义转义字符的表示字符的表示:
21、 : 用一个用一个转义标识转义标识符符“”开开头头,后面是需要的,后面是需要的转义转义字符。常字符。常用的用的转义转义字符序列的字符常量字符序列的字符常量见见表:表:转义转义字符是特殊形式的字符常量字符是特殊形式的字符常量26转义转义字符表:字符表:转义转义字符字符 功功 能能 n 换换行行 v 垂直制表垂直制表 b 退格退格 r 回回车车 f 走走纸换页纸换页 t 跳到下一个制表位跳到下一个制表位(7列列) 反斜反斜线线字符字符 单单引号字符引号字符 “ 双引号字符双引号字符 ddd 至位八至位八进进制数表示的字符制数表示的字符 xdd 至位十六至位十六进进制数表示的字符制数表示的字符转义符
22、“”表示将其后的字符原来的含义进行转换,变成某种另外特殊约定的含义。27例:例:main() printf(“ctlanguagsberCn”); printf(“istusef165x6c”);屏幕屏幕输输出:出:C languageis useful165转换为十进制为117,是ASCII的u6c转换为十进制为108,是ASCII的l28l定定义义形式形式: charl占存占存储储空空间间 : 一个一个变变量一个字量一个字节节2. 字符字符变变量量一个字符一个字符变变量只量只能包含一个字符能包含一个字符main()main()char c ;char c ; c = c; c = c; p
23、rintf ( “%c”, c printf ( “%c”, c );); 运行运行结结果:果:C C题题目中有几个目中有几个c c,哪些是等价的?哪些是等价的?例:例:29aa的的ASCIIASCII值为值为97 97 内存中存内存中存储储形式形式0 1 1 0 0 0 0 1例:例: ASCIIASCIIASCIIASCII码码码码字符字符字符字符aa、AA、11 存存存存储为储为储为储为:97979797、65656565、494949490 1 1 0 0 0 0 1在在ASCII范范围围以内以内,整型数据整型数据与字符型数据可以通用与字符型数据可以通用整型数整型数97 97 内存中存
24、内存中存储储形式形式0 0 0 0 0 0 0 030main()main() char a; char a; int b; int b; a=A; a=A; b=a+25; b=a+25; printf(“%c,%d,%c,%dn”,a,a,b,b); printf(“%c,%d,%c,%dn”,a,a,b,b); 例:例: 计计算字符算字符A与整型数据与整型数据25的和。的和。程序运行程序运行结结果:果:A,65,Z,9031字符串常量是字符串常量是字符串常量是字符串常量是用用用用双引号双引号双引号双引号括起来的一个或多个字符。括起来的一个或多个字符。括起来的一个或多个字符。括起来的一个或
25、多个字符。n n个字符个字符组组成的字符串常量成的字符串常量, , 占内空占内空间为间为 n+1 n+1 个字个字节节。c ch hi in na a00字符串字符串结结束束标记标记“空空”字符字符例:例:a a 串串长长 1 1 This is C stringThis is C string 串串长长1616 “ ” (空格)空格) 串串长长1 1 “” “” (不含空格)不含空格) 串串长长0 032字符常量字符常量和和字符串常量字符串常量的区的区别别:在程序中,可以用字符常量或字符串常量表示在程序中,可以用字符常量或字符串常量表示单单个个字符,例如字符,例如 a a,或,或“a”“a”
26、,两者的区,两者的区别别如下:如下:(1 1) 字符串字符串aa在内存中占在内存中占2 2个字个字节节,而字符,而字符a a 在内存中占在内存中占1 1个字个字节节。 字符串字符串a a 字符字符aa(2 2) 不能将字符串不能将字符串赋给赋给一个字符一个字符变变量。量。例:例: char ch1,ch2; char ch1,ch2; ch1=a; /* ch1=a; /*正确正确*/*/ ch2=a; /* ch2=a; /*错误错误*/*/a0a33练习练习:1.1.以下不合法的以下不合法的变变量名量名为为: (A) _123 (B) IF (C) e4 (D)float (A) _123
27、 (B) IF (C) e4 (D)float下列字符串的下列字符串的长度度及及输输出内容出内容: “ 054 ” “ 054 ” “x56”cta ” “x56”cta ” “ntbab” “ntbab” 3 输输出出 ,6输输出出7V”c a6 输输出出 ab十进制为86对应”V”“ab0efg”“ab011efg”2 ab6 ab efg十进制为9对应ASCII为”t”34在定在定义变义变量量时为时为其指定其指定值值方法方法:int a=5;int a=5;int a,b,c=5;int a,b,c=5;int a5,b=5,c=5;int a5,b=5,c=5;int a=b=c=5;
28、int a=b=c=5;1. 定定义变义变量的同量的同时时为为其初始化其初始化2. 初始化不是在初始化不是在编编译时进译时进行行,而是在程而是在程序运行序运行时时完成的完成的2.2.4 2.2.4 变量的初始化量的初始化初始化初始化352.3 2.3 运算符和表达式运算符和表达式运算符运算符: : 描述各种操作的符号。描述各种操作的符号。 2.2.算算术术表达式:表达式:由算由算术术运算符、常数、运算符、常数、变变量、函数和量、函数和圆圆括号括号组组成成 例如:例如:3. 优先先级:高于高于4. 结结合性:合性:“左左结结合性合性”或称或称为为“自左至右的自左至右的结结合方向合方向”即运算即运
29、算对对象先与左象先与左边边的运算符的运算符结结合。合。 例如:例如:a - b + c注意注意: 是除法运算符。当两个整数相除是除法运算符。当两个整数相除时为时为整除。整除。 9/2=4; -9/2=-4; (若有一个是若有一个是负负数数,采取向零取整采取向零取整) %是取余数运算符是取余数运算符,只能作用于两个整数。运算只能作用于两个整数。运算结结果的果的 符号与被除数的符号一致。符号与被除数的符号一致。 9%2=1 ; -9%2=-1 ; 9%-2=1; 36基本算基本算术术运算符运算符37运算符属性:运算符属性:(1) (1) 优优先先级级 当若干个运算符同当若干个运算符同时时出出现现在
30、表达式中在表达式中时时,优优先先级规级规定了运定了运算的先后次序算的先后次序。优优先先级级有有1515级级。 C C语语言把言把圆圆括号作括号作为为运算符,运算符,规规定它的定它的优优先先级级最高最高(15(15级级) ),从而保从而保证优证优先运算先运算圆圆括号内的式子,逗号运算符的括号内的式子,逗号运算符的级别级别最低,最低,规规定定为为1 1级级。(2) (2) 结结合性合性 当若干个具有相同当若干个具有相同优优先先级级的运算符相的运算符相邻邻出出现现在表达式中在表达式中时时, ,结结合性合性规规定了运算的先后次序定了运算的先后次序。分。分为为“从左到右从左到右”和和“从右到从右到左左”
31、两个两个结结合方向。合方向。 大多数运算符的大多数运算符的结结合方向合方向为为 “ “从左到右从左到右”; 单单目运算符、目运算符、赋值赋值运算符和条件运算符的运算符和条件运算符的结结合方向合方向 “ “从右到从右到左左”(单单目运算符是指作用于一个操作目运算符是指作用于一个操作对对象的运算符象的运算符) )。38例例: 将下列数学表达式将下列数学表达式: 写成符合写成符合C语语言言规则规则的表达式如下的表达式如下:(a+b+c)/(sqrt(a)+b*( sin(x)+sin(y)+sin(z) 其中其中sqrt(a)和和sin(x)、sin(y)、sin(z)都都是数学函数的引用,表达式中
32、用了三是数学函数的引用,表达式中用了三层层括号,以保括号,以保证证表达式的运算表达式的运算顺顺序。序。392.3.2 赋值赋值运算符和运算符和赋值赋值表达式表达式1.1.一般一般赋值赋值运算符:运算符:= =赋值赋值表达式:由表达式:由赋值赋值运算符将一个运算符将一个变变量和一个表达式量和一个表达式连连接起来的式子。接起来的式子。形式:形式:变变量名量名= =常量或表达式常量或表达式功能:将右功能:将右边边常量或表达式的常量或表达式的值赋给值赋给左左边边的的变变量。量。例:例:a=3; b=c+d ; a=3; b=c+d ; 说说明:明: 赋值赋值后,原来左后,原来左边边的的值值被右被右边边
33、表达式的表达式的值值替替换换; 如果右如果右边边表达式的表达式的值值的的类类型与左型与左边变边变量的量的类类型不一型不一 致,以左致,以左边变边变量的量的类类型型为为准,将表达式准,将表达式值值的的类类型型转换为转换为左左边变边变 量的量的类类型。型。 结结合方向合方向“从右向左从右向左”。 例:例: x=y=a+b;40例:main() int a; double b=3.5; a=b+2.1; printf(“a=%d”,a); 运行结果:a=5412. 复合复合赋值赋值运算符运算符复合复合赋值赋值运算符:在运算符:在赋值赋值符符“=”之前加上其它运算之前加上其它运算符符共有共有10种复合
34、种复合赋值赋值运算符运算符: += ,=, , &, =, |= 例:例:int a=1, b=2, c=2; double x=1.5,y=2,z=2; c*=a-b; c的的值值? 2*(1-2)=-2 int型型 z-=x+y; z的的值值? 2.0-(1.5+2.0)=-1.5 double型型422.3.3 2.3.3 2.3.3 2.3.3 逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符和逗号表达式1.1.逗号运算符:即逗号运算符:即“,” 优优先先级级:所有运算符中:所有运算符中级别级别最低的运算符最低的运算符。 形式:形式:表达式表达式1 1,表达
35、式,表达式2 2,表达式,表达式n n 求解求解过过程:程:顺顺次求解表达式次求解表达式1 1,表达式,表达式22 最后求解表达式最后求解表达式n n。 逗号表达式的逗号表达式的值为值为表达式表达式n n的的值值。 结结合性合性: :左左结结合合例如:例如:a=3*5,a*4a=3*5,a*4 a=3*5,a*4,a+5 a=3*5,a*4,a+5 x=(a=4%3 , a+1, a*10) x=(a=4%3 , a+1, a*10)602010432.4 2.4 数据数据类类型型转换转换l 转换转换原原则则 整型、整型、实实型和字符型可以混合运算型和字符型可以混合运算 一般一般类类型数据先型
36、数据先转换为标转换为标准型准型 不同不同类类型的要先型的要先转换为转换为相同相同类类型型l形式形式 自自动进动进行行-隐隐式式转换转换 强强制制进进行行-显显式式转换转换44转换规则转换规则: int unsigned int long int unsigned long int double short , char float(1) float 型数据一律型数据一律转换成成double 型数据。型数据。(2) char 和和short int 型数据一律型数据一律转换转换成成 int 型数据型数据 以上两条以上两条转换转换原原则说则说明:即使两个操作数明:即使两个操作数类类型相同,但只型相
37、同,但只要它要它们们同属同属 char , short int 或或 float 类类型,型,则转换则转换一定一定发发生。生。竖竖直方向的直方向的转换转换表示那些一定表示那些一定要要发发生的生的转换转换;横向表示操作;横向表示操作数的数的类类型型转换转换的方向。的方向。2.4.1 2.4.1 2.4.1 2.4.1 不同数据不同数据不同数据不同数据类类类类型的数据型的数据型的数据型的数据间间间间的混合运算的混合运算的混合运算的混合运算优优先先级级低的向低的向优优先先级级高的高的转换转换45f f f f的的的的类类类类型?型?型?型? int double doubledouble已知:已知:
38、int i; long e; float f; double d; f = 10 + a + i * f - d / e double运算运算过过程中的程中的类类型型转换转换不是不是变变量本身数据量本身数据类类型的型的转换转换例:例:462.4.2 强强制制类类型型转换转换 将指定表达式的将指定表达式的值转换为值转换为指定指定类类型型. . 形式:(形式:(类类型名)(表达式)型名)(表达式)例如:例如:( double) (a+b)( double) (a+b) 说说明:明: () 表达式表达式应应用括号括起用括号括起例如:例如: (int)(x+y) ; (int)x+y;() 在在强强制
39、制类类型型转换时转换时,得到一个所需,得到一个所需类类型的中型的中间变间变量量,原来,原来变变量量类类型未型未发发生生变变化。化。例如:例如:float x=8.6 ; int y; y=(int)x ;472.5 自增、自减运算符(、)作用:作用:使使变变量的量的值值增或减,如:增或减,如:i , i (使用之使用之前前,先使,先使i的的值值加(减)加(减)1)i, i (使用之(使用之后后,使,使i的的值值加(减)加(减)1) +i 先先执执行行i=i+1,再使用,再使用i的的值值 i+ 先使用先使用i的的值值,再,再执执行行i=i+1例如:例如:int a=1 , b; b=+a ; b
40、=a+ ;说说明:明:(1 1)+、- - -为单为单目运算符目运算符(2 2)+ + 、只能用于、只能用于变变量,而不能用于常量或表达式。量,而不能用于常量或表达式。 例如:例如:10+10+,(,(x+y)+, +a, b+ x+y)+, +a, b+ 中合法的中合法的为:(3 3)自增、自减运算符)自增、自减运算符为为右右结结合性合性(即自右至左)。(即自右至左)。 例如:例如:a+ a+ (a+a+) (4)(4)单单独作一个独作一个语语句使用句使用时时,两种形式的,两种形式的结结果一果一样样。48i=2;k=i+i+i+;执执行完分行完分号再自增号再自增i=?k=?算一算?492.6
41、 2.6 位运算位运算 位运算是位运算是针对针对二二进进制数的运算,通常只适用于整制数的运算,通常只适用于整数数据。数数据。 C C语语言中提供的位运算符有:言中提供的位运算符有: 、 、 & & 、 、1.1.按位取反运算符按位取反运算符形式:形式: A A功能:把功能:把A A的各位都取反,(即的各位都取反,(即0 0变变1 1,1 1变变0 0)例如:例如:int A=179int A=179502. 按位与运算符按位与运算符 &形式:形式:A&B功能:功能:对对A的各位与的各位与B的的对应对应位位进进行比行比较较,如果两者都,如果两者都为为1, A&B对应对应位上的位上的值为值为1,否
42、,否则为则为0。例如:例如:int A=179int A=179(二(二进进制制1011001110110011) int B=169 int B=169(二(二进进制制10101001)10101001)513. 按位或运算符按位或运算符|形式:形式:A | B功能:功能:对对A的各位与的各位与B的的对应对应位位进进行比行比较较,如果两者中有一个,如果两者中有一个 为为1,A|B对应对应位上的位上的值为值为1,否,否则为则为0。例如:例如:int A=179int A=179(二(二进进制制1011001110110011) int B=169 int B=169(二(二进进制制101010
43、01)10101001)524. 按位异或运算符按位异或运算符 形式:形式:AB功能:功能:对对A的各位与的各位与B的的对应对应位位进进行比行比较较,如果两者不同,如果两者不同, AB对应对应位上的位上的值为值为1,否,否则为则为0。例如:例如:int A=179int A=179(二(二进进制制1011001110110011) int B=169 int B=169(二(二进进制制10101001)10101001)535. 左移运算符左移运算符 形式:形式:A形式:形式:An ( 其中其中 n为为一个大于一个大于0的整型表达式)的整型表达式)功能:把功能:把A的的值值向右移向右移动动n位,左位,左边边空出的空出的n位用位用0填填补补。 相当于相当于对对A作作n 次除以次除以2的运算。的运算。例如:例如:int A=179int A=179(二(二进进制制1011001110110011)55