下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、语言讲义第二章C 语言的数据类型和运算第二章C 语言的数据类型和运算2.1 数据类型数据是计算机加工处理的对象, C 语言中的数据包括:常量、变量和有返回值的函数。为存储和处理的需要,将数据划分为不同的类型,编译程序为不同的类型分配不同大小的存储空间(存储单元的字节数),并对各种类型规定了该类型能进行的运算(运算符集),任何类型数据的值均被限制在一定的范围内,称为数据类型的值域(取值范围)。211 C的数据类型短整数 short (16bit). .整型整数 int (16bit)长整数 long (32bit)数值类型单精度型 float (32bit)基本类型实型双精度型 double (
2、64bit)(浮点型 )(简单类型)C字符类型 char (8bit)的枚举类型 enum数构造类型数组类型据(组合类型 )结构类型 struct联合 (共用 )类型 union类(导出类型 )型指针类型文件类型 FILE空类型 void说明 : 构造类型是由基本类型按一定的规律构造而成的。空类型的作用:表示函数没有返回值;说明函数无参数;表示指针不指向任何值。2.1.2 数值型数据的表示与存储形式如 的表示:日常表示语言中的表示3.14159*1003.14159e00.314159*1010.314159e+10.0314159*1020.0314159e231.4159*10-131.4
3、159e-13141.59*10-33141.59e-3尾数部份指数部分1语言讲义第二章C 语言的数据类型和运算小数点的位置是浮动的,称为浮点数形式。在计算机内部实数都以浮点形式存储,如 float 占 4 个字节,三个字节存数字部分,一个字节存指数部分。0.31415 9+ 1数字部分( 3 个字节)指数部分( 1 个字节)小数点的位置是固定的,称为定点数,如:3.14159, 10, -20, 1992显然整数都属于定点数,如:整数 10,在计算机内部一般占2个字节。0000000011111111定点数的小数点一般是在最高位(定点小数 )或在最低位(定点整数) 。对于实数型定点数如: 3
4、.14159,语言则把它按指数形式存放3.14159e0,即的实数一律以浮点形式存储。2. .1 3 字符型数据的表示和存储形式字符型数如: ( a, A,)在#内,存中3以相应的ASCII 代码存放(占一个字节) ,如 a的 ASCII 代码为 97,存储形式为 :01100001在中, ASCII 代码值可以被看成整数,如A+32为 97 与 a等价。2.1.4基本类型的名字和长度下列关键字称为类型区分符:char、 int、 short、 long 、 signed 、unsigned 、 float 、 double类型区分符代表一个基本类型的名字,用来说明一个数据的类型。表 2.1基
5、本类型的名字和长度完整的类型名简单的类型类型的长度(字取值范围名节)charchar1有符号: -128127无符号: 0255signed charsigned char1-128127unsigned charunsigned10255charintint2或 4(与具体机字节 :-3276832767器有关)4 字节 :约 -21 亿21 亿short intshort2-3276832767long intlong4约-21 亿21 亿signed intsigned2或 4 (同 int )同 int2语言讲义第二章C 语言的数据类型和运算unsigned intunsigned2
6、或 4(同 int)字节: 0655354 字节:约 042 亿signed short intsigned shor2-3276832767unsigned shortunsigned2065535intshortsinged long intsigned long4约-21 亿21 亿unsigned longunsinged4约 042 亿intlongfloatfloat4绝对值约13.4e-3813.4e+38doubledouble8绝对值约 :1.7e-3081.7e+308long doublelong double=8由具体实现定义说明: signed 和 unsigned
7、不能同时修饰 char,short 和 long 或 signed 和 unsigned 不能同时修饰int 。 float不能使用任何修饰词,double 可用 long修饰; int的长度与具体机器的字长相同,在16位机上为 2 字节,在32 位机上为字节。因此, int的长度与 short 或 long 相同。 signed char用个字节的低位表示字符值,最高位表示符号。unsigned char用整个字节表示字符值,无符号位。char 表示有符号和无符号与具体机器系统有关,但 char 一定和 signed char 或 unsignedchar 其中之一同。在多数机器系统中,ch
8、ar 与 signed char同。浮点类型的范围与浮点在机器内的表示有关,标准没有规定浮点数格式,大多数机器浮点数格式为:对于个字节浮点数,阶码占位,尾数占位,位符号位:尾数阶码符号位( 1 位)23 位8 位对于字节的浮点数:尾数阶码符号位( 1 位)52 位11 位在浮点数中尾数位决定精度(有效数字位数) ,阶码决定取值范围 。对于带符号的数据类型,一般用最高位(左边第位)表示符号,表示正,表示负,数值以补码形式存放(一个正数的补码是该数的二进制数),如()补为0000000000001010 。一个负数的补码为取反加,如() 补 为 1111111111110110 。表中列出的 sh
9、ort , int , long 是带符号的 ( 隐含 signed) ;3语言讲义第二章C 语言的数据类型和运算对于无符号的数据类型,最高位不作为符号,与其它各位一起表示数值,因此,无符号数只表示正数不表示负数,与同样长度的带符号正数相比表示的最大数扩大了一倍。字符型数据也分为signed 和 unsigned 。ANSI 标准 ASCII 码字符的允许取值范围为0127,用位表示就可以了,最左位补表示正数。有些计算机系统,除ASCII 码字符外,还扩展使用一些图形符号(如“” ),扩充使用用 128 255,其第一位为。因此,对 signed 字符型数取值范围为 -128 127。对 un
10、signed 字符型,取值范围为 0 255; 实数类型数据signed 、 unsigned 之分;以后各章均使用类型的简写形式;语言提供了一个测试某一类型数据所占存储空间长度的运算符sizeof,格式为sizeof(类型标识符 ) 。如 sizeof(char)为,sizeof(long)为。2.1常量和变量的常量有两种形式:一种是文字常量,简称常量或常数,文字常量是由表示值的文字本身直接表示的常量, 如 123,3.14159 ;另一种是符号常量, 是用标识符表示的文字常量 (标识符一般用大写英文字母) ,标识符是文字常量的名字。任何一个常量都属于一个数据类型,文字常量的类型由文字常量自
11、身隐含说明,如 123 为整型, 3.14159 是一个浮点型,符号常量的类型由定义时指定。2.2.1 常量的表示的常量有整数常量、浮点常量、字符常量、字符串常量和枚举常量。整数整数有三种形式:十进制整数、八进制整数和十六进制整数。十进制整数十进制整数由数字09 组成的数字串, 多位数时最左第一个数字不能为,前面可以有表示正负的符号 “” 或“”,“” 可以省略。 如 738-500+39是合法的整数。八进制整数八进制整数由数字07 组成的数字串,第一个数字必须为0(前导零),它是八进制数的标志, 八进制一般用于表示无符号数如:0137027+013-024是合法的八进制整数,而 0128 非
12、法。八进制可以与十进制转换:如 0137= 95若将转换为八进制:8 811余81余0余即:十六进制整数4语言讲义第二章C 语言的数据类型和运算十六进制整数是由数字09 和字母 a f (或)组成的符号串,符号串必须以x或 X( 十六进制的前缀)开头,十六进制表示无符号整数,如0x13a0xc320xff0xb8000xdc 都是合法的十六进制整数。013ax13a13a 均为非法。说明:所有整数的缺省类型是int ,通过在其后面加后缀字母,可以表示长整数(long)无符号整数 (unsigned)和无符号长整数(unsigned long) 。长整数:在任意进制整数后面加l 或 ,如 27l
13、018l0x1aL无符号整数:在任意进制整数后加u 或。如 27u 0400U 0x1aU无符号长整数:任意进制的整数后加ul 或 UL 。如: 27ul0400UL0x1aUL.后缀字母大小写任意,由于l 与数字容易混,常用。当整数的值超出int 类型所能表示的范围时,称为整数溢出。 整数溢出会产生不正确的结果,为避免溢出或类型转换的需要,应根据具体情况将整数相应地表示为长整数、无符号整数或无符号长整数,如在16 位机上,整数123456 会产生溢出,应表示成123456L.2、浮点数浮点数的一般形式为: 整数部分 . 小数部分 e n其中 表示可选项,en 称为指数部分,e n 表 n,
14、“ e”可以写成“” 。n称为阶码(位十进制无符号常整数,可以有前导但仍表示十进制),n 前面的“”可以省略。如-123.567e+5-123.567E5-123.567e05 都是代表值 -12356700.0浮点数的组成规则如下:一个浮点数可以无整数部分或小数部分,但不能二者均无。一个浮点数可以无小数点或指数部分,但不能二者均无。例如: 3.141593.1E+02-.234e+5243.e-22.01234e+30.08100.0 都是合法的浮点数。若将 2.01e+3 写成 2010,将 . 写成,或将100. 写成 100 则它们不是浮点数而是整数。下面一些是非法表示:-.e+1 既
15、无小数部分也无整数部分1e-0.5:阶码不是整数1e+I:阶码不是常量(除非I 已定义为符号整型常量)当浮点数超出它的类型所能表示的范围产生浮点溢出。如果浮点数的绝对值小于所能表示的最小值则下溢。如 1.7e-309 和-1.7e-309 均产生下溢。下溢时绝对值太小以致机器不能表示而产生零值,称之为“机器零” 。下溢时机器可能不能正常运行。当浮点数的绝对值大于所能表示的最大值时产生上溢,如1.7e309 和 -1.7e309 均产生上溢。上溢时将产生错误的结果。浮点数的缺省类型是 double,通过在浮点数后面加后缀字母可以表示单精度( float )数、双精度数( double)和高精度
16、(lang double) 数。单精度浮点数:在浮点数后面加f 或 F。如: 3.14159F。5语言讲义第二章C 语言的数据类型和运算双精度浮点数:在浮点数后面加d 或 D 。如: 3.14159d。高精度浮点数:在浮点数后面加l 或 L。如: 3.14159L。在程序中可根据存储的需要、精度的需要或类型转换的需要将浮点数表示为适当的类型。3、字符常数字符常数通常是指一对单引号(单撇号)括起来的一个字符,形式为:字符字符常数可以被看成是一个整数,值为该字符的ASCII 码值。字符常数有两种表示方法。(1) 用字符的图形符号表示一个字符,形式为:字符的图形符号字符的图形符号是指可打印字符,AS
17、CII 码字符集中,字符码为32126 的字符是可打印字符,因而这种方法只适用于部分字符。如: aB +3 注意: a和 a 表示两种完全不同的概念 , a是一个字符常数, a 是由单个字母构成的标识符。另外,在可打印字符中,有两个特殊字符不能用图形符号来表示,它们是单引号本身()和反斜线( )。即 是非法表示,要想表示它们必须用转义序列表示。( 2)用转义序列表示一个字符,形式为:转义序列转义序列是由反斜线()开头的一个特殊字符串,每个转义序列表示字符集中的一个字符,转义序列及其表示的字符如表2.2 所示。表 2.2 转义序列转义 ASCII 字符码 表示的字符序列十进制八进制十六进制000
18、0x00空字符a770x07响铃字符b8100x08退格字符f120140x0c换页字符n100120x0a换行字符r130150x0d回车字符t90110x09水平制表字符v110130x0b垂直制表字符921340x5c反斜线字符?630770x3f问号字符390470x27单引号字符”340420x22双引号字符ooo02550003770x000xff以 ooo 为字符码的字符xhh02550003770x000xff以 xhh 为字符码的字符说明:6语言讲义第二章C 语言的数据类型和运算()从表中可以看出,转义序列有两种形式:一种是反斜线后跟一个图形符号;另一种转义序列的位型“ooo
19、”和“ xhh ”。前者表示常用的控制字符(字符码为031 的字符),如 n表示一个换行字符, 其 ASCII 码为十进制 10。后者可以表示字符集中的任一字符 (字符码为 0255 的所以字符) 。()位型中的ooo 表示个八进制数字,可以不用前缀;hh 表示个十六进制数字, x 是前缀不能省。例如:水平制表符可用下列任一种形式表示: t 01111x09x9字符 A 可用下列任一种形式表示: A 101x41()单引号和反斜线字符虽然是打印字符,但编译程序规定必须用转义序列表示。例如:单引号字符可用下列任一种形式表示: 047 47x27 反斜线字符可用下列任一种形式表示:0134 134
20、 x5c ()双引号字符常数可以用图形符号或转义序列任一种形式表示。例如:“ ”042x22()字符0是值为的字符(空字符),不是空白字符。 0除表示值外,它强调对象的类型是字符型。也就是说,表示值为的字符用0比用好。、字符串C 语言没有字符串类型,但可以表示字符串常数,字符串变量是用字符数组来表示的。字符串常数 (简称字符串)是用一对双引号括起来的一个字符序列,其字符的个数称为字符串长度。形式为:“字符序列”双引号是字符串的定界符而不是字符串的组成部分,双引号中的任何一个字符都是一个字符常数,形式为不带单引号的字符(图形符号或转义字符)。例如:“n”一个字符串可以包含个字符,表示为“”(两个
21、相邻的双撇号),称为空串。字符串在机内存储时,系统自动在其末尾加了一个 0, 0是字符串的结束标志,以确定字符串的实际长度,字符串的存储长度比实际长度大。空串的存储长度为,存储长度为。注意:()“ a”和 a是两个不同的概念。()当双引号作为字符串的组成字符时,必须用转义序列表示。如:“” is a empty strinng”表示: “” is a empty strinng()当单引号作为字符串的组成字符时,可以用图形符号表示,也可以用转义字符表示,如:“ It s a pen. ”“s a pen. ”7语言讲义第二章C 语言的数据类型和运算()字符串可以连接。被连接的两个字符串之间可以
22、有个或多个空白字符,但不能有其它字符。如: “Hello, ” “how are you? ”等价于“ Hello, how are you?”字符串连接主要用于源程序中表示长度跨越多行的字符串。如:printf(“ Hello,how are you?” ); 是非法的。因为语法规定字符串常数必须书写一行。如果一行写不下可用两种方法:printf (“ Hello,How are you?” );是续行符或:printf(“Hello, ”“ how are you: ” );2.2.2 符号常量为使程序易于阅读和便于修改,可以给程序中经常使用的常量定义一个有一定含义的名字,这个名字称为符号
23、常量。符号常量是一个标识符, 有三种方法定义一个符号常量 :一种是利用编译预处理的宏替换功能 #define ;另一种是用 const 类型限定符说明并初始化一个标识符;第三种方法是通过定义枚举类型来定义符号常量(以后讲)。1. 用 #define 定义符号常量形式: #define标识符常量表达式常量表达式是值为常量的表达式,一般为已定义的符号常量或文字常量,也可以由运算符连接常量形成的表达式;标识符是符号常量的名字,它代表常量表达式所表示的文字。例如:#define SIZE 100#define PI 3.1415926#define BLANK#define TWO_PI 2.0*PI
24、注:符号常量的名字(标识符)一般用大写字母。 #define行不是 C语句,而是编译程序的预处理控制, 因此其后面不加“; ”2. 用 const 定义符号常量 。形式: const类型区分符标识符 =常量表达式;符号“ =”左边的标识符被定义为常量,标识符代表常量表达式的值。例如: const int MAX=1000;const double PI=3.14159;const char BLANK=;const signed TRUE=1,FALSE=0;说明:用 #define和 const 定义的符号常量在实现上有本质不同。#define在编译预处理时用常量表达式去替换程序中所有出现的
25、常量标识符,标识符没有对应的存储单元;由 const说明的标识符是一个不可更改的左值,编译时要给它分配存储单元。8语言讲义第二章C 语言的数据类型和运算2应用举例:计算圆柱体的体积V= r hvoid main (void) float v,r,h;printf (“input r,h:”) ;scanf ( “%f%f”,&r , &h) ;v=3.14159 r *r*h;printf (“v=%fn”,v) ;如果使用符号常量:#include“stdio.h”#define PI 3.14159viod main void) float v,r,h;prinrf( “input r,h
26、: ”) ;scanf ( “%f%f”,&e,&h) ;v=PI r*r*h;printf(“v=%fn”,v) ;2.2.3 变量说明变量 :在程序中其值可变的量,每一个变量都有一个名字(标识符),称为变量名。常量的类型是由常量自身隐含说明的,不需要做显示说明,而变量的类型必须做显示说明。C 程序中任何变量必须遵循现说明后引用的原则,以便编译程序为变量分配适当长度的存储单元以及确定变量所允许的运算。变量说明的形式:类型区分符变量表。类型区分符:说明变量中所列变量的数据类型。变量表由一个或多个变量名组成,多于一个变量时中间用逗号“,”隔开。一个说明结束必须用分号“;”。变量数又称说明符表,这
27、里一个变量名即是一个说明符。如: int age,index;与int age;int index;等价程序中有些变量在使用前需要设置初值,如做为计数器使用(如n+; )和做累加和的变量 ( 如 sum=sum+x)通常置初值为零,做累乘积的变量(如time=time*y)通常置初值为1。给变量赋初值有两种方式:一是通过赋值语句置初值(如i=0 ;);另一个方式是在变量说明时给出初值称为初始化,格式为:类型区分符变量名 =表达式 , ;如:int age=15,index=1,i=0,j=0;int i=j=0;非法。因为i=j=0等价于 i=(j=0),而( j=0 )是赋值表达式。9语言讲
28、义第二章C 语言的数据类型和运算int i,j=0; j被初始化为0; i 的初值不确定。char c= ”y”;double esp=1.0e-5;注意:引用一个没有值的变量非法。2.3运算符和表达式C 的运算符十分丰富。由运算符通过对运算对象(操作数)进行各种操作,按操作数的数目可将运算符分为:单目(一元) ,双目(二元)和三目(三元)运算符;按运算符的功能分类有:算术运算符、关系运算符、逻辑运算符、自增和自减运算符、位运算符、赋值运算符和条件运算符。另外还有数组的下标 、 函数调用( )、表顺序求值的逗号运算符和类型强制运算符等。表达式是由运算符、操作符数组成的符合的语法算式 。从本质上
29、说,表达式是对运算规则的描述并按规则执行运算,运算的结果是一个值,称为表达式的值,其类型称为表达式的类型。单个操作数也是表达式。常量、变量、有返回值的函数调用和用()括起来的表达式称为简单表达式。由简单表达式和以简单表达式为操作数的表达式都是表达式。如 y 3(x 4)“”称为赋值运算符表达式的运算规则是由运算符的功能和运算符的优先级与结合性决定的。为使表达式按一定的顺序求值,编译程序将所有运算符分成若干组,每组规定一个等级称为运算符的优先级,优先级高的先执行运算。处于同一优先级的运算符的运算顺序称为运算符的结合性。运算符的 结合性 有从左至右(左结合)和从右至左(右结合)两种。表 22运算符
30、的优先级和结合性优先运算符结合性级1()-左结合2! (单目)(单目)右结合(类型) *( 指针运算 )&sizeof(类型名)3* (乘法)%左结合4(双目)(双目)左结合5左结合6左结合7!左结合8&左结合9左结合10|左结合11&左结合12| |左结合10语言讲义第二章C 语言的数据类型和运算13?:左结合14*%左结合&|2.3.1算术运算算术运算符包括(单目)(单目)(双目)(双目)*(实数式整数)%(整数)双目 ,* ,的操作数可为任何整数式或浮点数。对于“”“”还可以用于指针加(减)一个整数。双目运算符的两个操作数类型可以不同,运算时自动转换成相同的类型(以后介绍) 。基本原则是
31、值域较窄的类型向较宽的类型转换。例如:13 5结果为整数18两个操作数类型相同不转换13.0 5结果为 18.0 将 5 转换为 5.0 后运算 d97结果为整数3, d的类型为char,先将 d换成整数转100 再运算对于除运算符“” ,如果两操作数都是整数则执行整数除,结果也是整数,值为商的整数部分,小数部分被截去;若至少有一个操作数为浮点数则执行实数除,结果为浮点数。如:155结果为整数312结果为整数0 8 5结果为整数 11.0 2或1 2.0结果为实数0.5或 1.02.0对于求余运算符 %,规定两操作数必须为整数,运算结果也为整数,值为左操作数除以右操作数所得的余数,符号与左操作
32、数相同。如:17%5或17% 5结果为整数2 17%5 或 17% 5 结果为整数 25%10结果为整数510%5结果为整数0整数除和求余运算存在下列关系:a%ba a/b*b其中 a, b 均为整数下面是一个由算术运算符连接操作数构成的表达式25 (i%j*8/(i k)其中 i, j ,必须为整数k 可为整数或为浮点数2.3.2关系运算关系运算符包括 (小于) (大于)(大于等于)(等于)! (不等)关系运算符比较两个操作数值的大小,操作数可以为整数、字符、实数,两操作数类型可以不同,运算符按一般算术转换规则自动转换成相同的类型。结果类型一定为int ,如果操作数关系成立则结果为非0(一般
33、为1),否则为0。注意 C 语言中没有表示逻辑真值和逻辑假值的数据。任何非0 值(一般为非0 整数)都11语言讲义第二章C 语言的数据类型和运算表示逻辑真,整数0 表示逻辑假。如: a!= b 表达式值为非0,50+70=100.0表达式值为0.如果用浮点数比较来测试某个条件,则可能永远得不到所希望的结果。如设 x,y 为浮点变量,则表达式:x/y*y= =x值可能不成立。若需要判别两实数是否大约相等,可用下式表示:fabs(x/y*y-x) e-5如:数学中 a x b 与 C 中 a=x=b 含义不同。若 a=0,b=0.5,x=0.3 。则执行 “a=x=b ” 时先求 a=x 得 1(
34、真)再执行 1=b 得 0(假)。为判别 x 是否在区间 a,b 内应为:a=x & x278 在数学中不允许,在 C 中是允许的。按自左向右的原则:52为 117为008为0整个表达式为的值 0关系表达式的值为,也可看作整型表达式。如:inti=1,j=7,a;a=i+(j%4!=0);最后 a 的值为字符比较按 ASC 码进行ba为 aA为a=x+1=y+z若 x 为 2, y=3 则 z 的值为 1. .逻辑运算2 3 3逻辑运算符包括:& (与)|(或)!(非)逻辑运算符的操作数可以为任何基本类型,& 和 |的两个操作数的类型可以不同,运算时不执行类型转换 。非 0值的操作数视为逻辑真
35、,0 值操作数视为逻辑假,运算结果类型为int ,值为非 0(逻辑真)或0(逻辑假) 。运算规则:0&0为 0;0&1 为 0;1&0为 0;1&1 为 1注 1 可用任何非 0 操作数代替,下同。0|0为00|1为11|0为11|1为1!0为0!1 为0如:( c= a)或c= a其结果如果变量c 的值是小写字母,则上式为真(非0)否则为 0。d| 9若 d 为非数字时,表达式为非0 。否则为0!i 等价于i= =0但 !i 比 i= =0 效率高,若 c 为字符型,检查 c 是否为空白字符时用 !c比c= = 0好注意 :对于逻辑与(& )运算,当左操作数为0(假)时整个表达式的值已确定为
36、假,则右操作数根本就不计算(运算短路)。如: int i=1,j=1,k ;12语言讲义第二章C 语言的数据类型和运算i1&k=i+j其结果整个表达式的值为(假),k 的值为。对于逻辑或( |)运算,当左操作数为非(真)时整个表达式的值已确定为真,则右操作数根本就不计算。如: int i=1,j=1,k ;i 1|k=i+j其结果整个表达式的值为1(真), k 的值为。2.3.4自增和自减运算自增和自减运算符包括:+(增 1) - (减 1)“ +和”“ - ”是单目运算符,操作数必须是可更改的左值表达式。左值表达式是一个表示存储单元的表达式,一般为不带const 说明的变量名。带const
37、说明的标识符是不可更改的左值表达式。可更改的左值表达式包括:基本类型的变量名、下标表达式、指针变量名和间接访问表达式(指针变量) 、结构成员选择表达式和结构变量名。用()括起来的左值表达式也是左值表达式。“ + +将”操作数加 1, “- ”将操作数减 1,结果类型与操作数类型相同。整型或浮点型操作数按整型数值 1 增加或减少,指针类型操作数以后讲。“+ +”或 “- ”可以出现在操作数前面(前缀式)或后面(后缀式)如+n- nn+n-。前缀式先将操作数增(减),然后取操作数的新值作为表达式的结果。例如若n=1 则+n 结果为 2, n 的新值为2。后缀式将操作数增(减)1 之前的值作为表达式
38、的结果。操作数的增(减)1 运算是在引用表达式的值之后完成的称为后缀+(或)的计算延迟。一直延迟到出现下面情况时,操作数才增(减)。逻辑与运算符&逻辑或运算符|条件运算符?:顺序求值运算符, 一个完整的表达式(包括以语句形式出现的表达式,选择语句中的选择表达式,循环语句中的控制表达式, return 语句中表达式)举例:设intx=0 , y=1;x+x+结果为。整个表达执行完后x 值为。即若z=x+x+则 z 的值为, x 的值为 2。yx+&x结果为 1,因为结果为,& 后面的x 值为因而整个表达式的值为z=x*y | y 结果 z 的值为,因为|后的 y 值为,因而整个表达式的值为,z的
39、值为。上机可以测试: “ +”、“”运算的延迟情况。#include“ stdio.h”13语言讲义第二章C 语言的数据类型和运算void main(void) int x=0,y=1;printf(“ x=%d,y=%dn” ,x,y);printf(“ x+=%dn” ,x+);printf(“dn” ,y );printf(“ x=%d,y=%dn” ,x,y);输出: x=0,y=1;x+=0y =1x=1,y=0注:自增(自减)运算符的结合性是自右至左。它的运算对象只能是整型变量,而不能是表达式或常数 ,如 5+ 或( x+y ) +非法, +x 也是非法, x+ 也是非法的。若 x
40、 为 5, y 为 5, z=x- y,则 x=4,y=5,z=0 。例: 1 +i+i是错的,中间应有空格: +i+ +i;它的结合方法是:从左向右尽可能多地把连续的 +号组成运算符。2 i=3; j=+i+i,printf(“ %d”则输,j),出 10;而 printf(“ %d” ,+i+i) ,则输出 9。printf(“ %d %d” ,+i+i, i); 则输出 93。而 printf(“ %d %d” ,i, +i+ +i);则输出 59。3若 i=3;j=i+i; 则 j 的值是 8, i的值是 5;4若 i=3;i=i+i; 则 i 的值是 9;5若 i=3;i=i+i+;
41、 则 i 的值是 8;6若 i=3;j=i+i+; 则 j 的值是 6, i的值是 5;7若 i=3;i=+i+i; 则 i 的值是 10;2.3.5 位运算任何数据在计算机内部都是以二进制码形式存储的。例如一个unsigned char类型的字符A 存储形式为01000001。位运算是以逐个二进制位为直接处理对象的运算。这是 C 语言区别于其它高级语言的特色之一。位运算符是指(求反)&( 按位与 )|(按位或 )( 按位加、异或 )(右移)(左移)除是单目运算符外,其余均为双目运算符。所有位运算符的操作对象必须是整数。两个操作数类型可以不同,运算之前遵循一般算术转换规则自动转换为相同的类型。
42、结果类型是转换后的类型,结果的值与是有符号或无符号数有关。1 求反运算( )运算符“ ”将操作数的每个二进制位取成相反值,即0 变 1, 1 变 0。结果类型与操作数类型同。14语言讲义第二章C 语言的数据类型和运算例: unsigned i=0xd3f5,j=0;short k=0;将 i 变成二进制码 1101001111110101 i=0010110000001010即i 为 0x2C0Aj 的二进制码为全0, j 为全 1,即 65535将 k 各位求反, k 为全 1,因是有符号类型整数,所以k 为 -1。2 按位与、或、加运算(& 、|、 )运算规则:iji&ji|jij0000
43、0010111001111110可以看出: i0 的结果是i; i1 的结果是 i;例如unsigned short x=0xd3f5,y=0xff,z;(1) z=0xd3f5 & 0xff;它的值为0xf5, 即 0xd3f5 通过与 0xff 按位与取上了它的低8 位,而高8 位被屏蔽, 0xff称屏蔽码。1101001111110101& 00000000111111110000000011110101(2) z=0xd3f5|0xffz 被赋值为 0xd3ff通过与 0xff 按位或运算。使原来的数高8 位不变低8 位变为全 1。( 3) z=0xd3f50xffz 被赋值为0xd30a。 低 8 位取反其余不变(4) 对于十进制的位操作,应先转化为二进制,运算后再转为十进制。如: int i, j , ki =5; /*i的值为 -6*/j=5&8 ; /*j的值为*/k=58; /*k的值为*/利用“ ”,可使两个变量的值交换(不借助于第三个变量)。例: a=3;b=4;a=ab;b=ba=b(ab)=abb=a0=aa=ab=(ab)b(ab)=abbab=b0=b课堂作业:要想让某数的第4 位取反其它位不变,应如何设置。3移位运算符() 是双目运算符。移位运算的规则是将左操作数向左(“”或向右(“)”移
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力工程临时用工合同
- 办公楼新风系统安装协议
- 生态农业招投标与合同绿色生产
- 通信基站电力安全检查规定
- 通信行业会计专员财会聘用合同
- 企业内训会议室租赁合同样本
- 文化市场物业人员聘用合同
- 通信设备销售合同管理细则
- 入职承诺书:品牌推广策略篇
- 桑拿洗浴中心租赁合同样本
- 《食品经营许可证》延续申请表
- 2022年国家公务员考试《行测》真题(行政执法)及答案解析
- 2024年山东省东营市中考语文试题含解析
- 天然气管网安装工程施工过程岗位操作指南
- 2024年招商引资居间合同
- 船用甲板刷商业机会挖掘与战略布局策略研究报告
- 公司网络安全制度
- 跨学科主题学习- 探索外来食料作物传播史(课件)七年级地理上册同步高效备课课件(人教版2024)
- 学校编制外临时代课教师聘用管理办法
- 食堂承包经营服务项目投标方案(技术方案)
- 南京市江宁区2023-2024三年级数学上册期中试卷及答案
评论
0/150
提交评论