第三章数据类型_第1页
第三章数据类型_第2页
第三章数据类型_第3页
第三章数据类型_第4页
第三章数据类型_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章数据类型第1页,共52页,2023年,2月20日,星期三第三章

数据类型、运算符与表达式3.1基本概念1、C语言程序的组成特点

一个C源程序由函数构成,其中至少包含一个主函数(main函数)。

C程序总是由main函数开始执行。分号“;”是C语言的一部分。C程序书写格式自由,一行内可以写多条语句,且语句中的空格和回车符均可忽略不计。程序的注释部分应括在/*……*/之间;/和*之间不允许留有空格;注释都分允许出现在程序中的任何位置上。第2页,共52页,2023年,2月20日,星期三2、标识符

C语言的标识将可分为以下三类:一、关键字

C语言共有32个关用字;每个关键字在C程序中都代表着某一固定含意,所有关键字都要用小写英文字母表示,且这些关键字都不允许作为用户标识将使用。C语言中的关键字可见书.二、预定义标识符

这些标识符在C而言中都具有特定含意,如C语言提供的库函数的名字和预编译处理命令。C语言语法允许用户把这类标识用作其它用途,但这将使这些预定义标识符失去系统规定的原意。鉴于目前各种计算机系统的C语言已经把这类标识符作为统一的库函数名或预编译处理中的专用命令名使用,因此为了避免误解,建议用户不要把这些预定义标识符作它用或将它们重新定义。第3页,共52页,2023年,2月20日,星期三2、标识符三、用户标识符用户可以根据需要对C程序中用到的变量、符号常量、自己的函数或文件指针进行命名,形成用户标识符。这类标识符的构成规则如下:由英文字母、数字、下划线组成;且第一个字符不能是数字,必须是字母或下划线。如:

sum,average,class,student_nameM.D,$123.#33,3D64,a>bERROR!大、小写英文字母的含意不同。标识符中所允许包含的字符个数随不同的C编译系统而有所不同,通常可以识别前面6个字符。用户取名时,应当尽量遵循“简洁明了”和“见名知意”的原则。注意:

大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。习惯上,变量名用小写字母表示,以增加可读性。第4页,共52页,2023年,2月20日,星期三3、C语言的数据类型

整型字符型单精度基本类型实型枚举类型双精度

数据类型数组类型构造类型结构体类型共用体类型指针类型

空类型

第5页,共52页,2023年,2月20日,星期三3.2常量(Constant)⒈常量的概念在程序中不能改变的量称为常量。常量的类型由数据的外部表现形式确定。

常量区分为不同的类型,如12、0、-3等为整型常量,4.6,-1.23等为实型常量,’a’,’d’为字符常量,一般从其字面形式即可判别,也可以用一个标识符代表一个常量。#definePI3.1415926main()/*test1.c*/{floats,r,l;/*constfloatPI=3.1415926*/r=10.;l=2.*PI*r;s=PI*r*r;printf("l=%fs=%f\n",l,s);printf("PI=%f\n",PI);}第6页,共52页,2023年,2月20日,星期三2、符号常量概念:用一个标识符代表一个常量。例:#definePRICE30main()/*

test2.c*/{

intnum,total;

num=10;total=num*PRICE;printf("total=%d",total);}第7页,共52页,2023年,2月20日,星期三3.3变量(Variable)⒈变量的概念变量是在程序中可以改变的量,变量具有三个特征:

⑴变量有名,用标识符命名;

⑵变量有类型;

⑶在程序中可以改变。

变量对应于内存中某一地址下的几个单元,变量名作为程序引用变量的标志。变量的类型确定了变量在内存中所占单元的数量及其表示的方式。变量的地址可以通过&运算获得。内存inta;

a变量的引用标志&a对应a的地址。整型变量占两个内存单元。变量必须先说明后使用!说明的目的是确定变量的名字和类型。第8页,共52页,2023年,2月20日,星期三3.4整型数据⑴整型常量的表示整型常量根据表示的范围可以有长整型和一般整型,还可以表示为十进制、八进制、十六进制。其中八进制、十六进制不能有符号。一般整型的表示进制表示举例范围字节数十进制2304 -32768~+32767 2八进制04400 0~0177777 2十六进制0xaa00 0x0000~0xffff 2长整型的表示进制表示举例范围字节数十进制 -21234l -231~+231-1

4八进制04400l 0~017777777774十六进制 0xaa00l 0x0000----0xffffffff4第9页,共52页,2023年,2月20日,星期三3.4整型数据⑵整型变量的分类①有符号整型变量说明说明符 所占字节数 范围

int 2 -32768~+32767short [int] 2 -32768~+32767long [int] 4 -2147483648~+2147483647②无符号整型变量说明说明符 所占字节数 范围unsigned 2 0~65535unsignedshort 2 0~65535unsignedlong 4 0~4294967295unsignedd,e,f;第10页,共52页,2023年,2月20日,星期三3.4整型数据⑶整型变量的定义

C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。例如:

inta,b;(指定变量a,b为整型)

unsignedshortc,d;(指定变量c,d为无符号短整型)

1onge,f;(指定变量e,f为长整型)

对变量的定义,一般是放在一个函数的开头部分(也可以放在程序中间,但作用域只限于某一分程序,这将在后面介绍)。第11页,共52页,2023年,2月20日,星期三3.4整型数据⑶整型变量的定义(举例)/*test3.c*/main(){inta,b,c,d;/*指定a,b,c,d为整型变量*/

unsignedu;/*指定u为无符号整型变量*/

a=12;b=-24;u=10;c=a+u;d=b+u;printf("c=%dd=%d",c,d);}不同种类的整型数据可以进行算术运算。第12页,共52页,2023年,2月20日,星期三(1)浮点型常量的表示(只有十进制表示)浮点型常量有两种表示方式:小数表示方法,指数表示方法。不区分单、双精度。小数表示方式规则:一个小数点、符号和至少一位数字。-2.01.0.11113-15.指数表示方式规则:规则:ne±m表示n×10mn小数部分,整型常量或小数形式表示的实型常量。指数部分,三位整数。

n决定精度,一般精度为7位;m决定范围,范围10-38到10+38,当超过范围时称为“溢出”,小于10-38称为下溢,当0处理,大于10+38,称为上溢,系统出错!123.456表示为0.123456E+3-10000000

表示为-1e+70.0000123

表示为0.123e-43.5实型数据第13页,共52页,2023年,2月20日,星期三(2)实型变量

C实型变量分为单精度(float型)和双精度(double型)两类,对每一个实型变量都应在使用前加以定义。如:floatx;/*一般,一个float型数据在内存中占4个字节(32位)*/doublez;/*一个double型数据占8个字节。*/

单精度实数提供7位有效数字,双精度实数提供15~16位有效数字,数值的范围随机器系统而异。单精度实数的数值范围约为10-38~1038,双精度实数范围约为10-308~10308。应当说明,实型常量不分float型和double型。一个实型常量可以赋给一个float型或double型变量。根据变量的类型截取实型常量中相应的有效位数字,3.5实型数据说明符所占字节数 范围精度float 4 10-38~10+38 7位double 8 10-306~10+306 16位第14页,共52页,2023年,2月20日,星期三(2)实型变量例:main()/*test4.c*/{floats;s=111111.11;printf("\nfloat=%f",s);}3.5实型数据main()/*test5.c*/{doubles;s=111111.11;printf("\ndouble=%f",s);}第15页,共52页,2023年,2月20日,星期三

(3)实型数据的舍入问题3.5实型数据浮点型变量包含精度和范围两个概念。超过精度位数后的位数值不确定。floata;a=1.1111111111;超过范围溢出(Overflow)。floata,b,c;a=1.234e+20b=2.345e+21c=a*b

当运算结果大于10+38称为上溢,系统出错。当运算结果小于10-38称为下溢,当0处理。超出精度部分,不准确。超出1038,溢出。第16页,共52页,2023年,2月20日,星期三3.6字符型数据(1)字符常量的表示表示ASCII字符集中的一个字符。字符有一个整型值,即该字符的ASCII码值。表示方法:’a’、’!’

。撇号定界的一个字符。值为:97(2)字符串常量的表示双引号“定界的字符序列。系统会在最后一个字符后加NULL(ASCII码值为0),标志字符串的结束。如:”HEFEI””hello”’a’和”a”的区别?内部’a’:97”a”:97NULL第17页,共52页,2023年,2月20日,星期三3.6字符型数据(3)转义字符转义字符是C语言表示字符的特殊方法,用来表示ASCII字符集中的控制字符,以及系统占用字符如:”。表示方法:①\字符;②

\八进制(十六进制整数,小于256)

\b 表示回退一格字母\n 表示换到下一行头 \r 表示回车到本行头 \t表示TAB(占8列) \\ 表示\ \? 表示?符号 \’ 表示’ \” 表示” \0 表示NULL八进制十六进制数\x41\101代表’A’printf(“\007”);响铃printf(“语文\n数学\n”);例:“\\141\141abc\t”?统计该字符串的长度第18页,共52页,2023年,2月20日,星期三

(4)转义字符举例

main()/*test7.c*/{

printf("abc\tde\rf\tg\n");printf("h\ti\b\bjk");}

运行结果:

f_______gdeh______j_k

3.6字符型数据第19页,共52页,2023年,2月20日,星期三

(5)字符变量

一个字符占一个字节.

字符型变量用来存放字符常量,注意只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。

字符变量的定义形式如下:

charc1,c2;它表示c1和c2为字符型变量,各可以放一个字符,因此可以用下面语句对c1、c2赋值:

c1=‘a’;c2=‘b’;一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。3.6字符型数据说明符所占字节数 范围char 1 -128~+127unsignedchar 1 0~255第20页,共52页,2023年,2月20日,星期三

(6)字符数据在内存中的存储形式及其使用方法

将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。例如字符‘a’的ASCII代码为97,‘b’为98,。实际上是以二进制形式存放的.3.6字符型数据c1c297980110000101100010main(){charc1,c2;

c1=97;c2=98;

printf(“%c%c”,c1,c2);}运行结果:ab第21页,共52页,2023年,2月20日,星期三

(6)字符数据在内存中的存储形式及其使用方法

c1、c2被指定为字符变量。但在第3行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:

c1='a';c2='b'因为‘a’和‘b’的ASCII码为97和98。也可以理解为将97和98两个整数直接存放到cl和c2的内存单元中。字符数据以ASCII码存储,它的存储形式与整数的存储形式相类似。C语言使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出。以整数形式输出时,直接将ASCII码作为整数输出。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。3.6字符型数据第22页,共52页,2023年,2月20日,星期三

(6)字符数据在内存中的存储形式及其使用方法字符数据与整型数据可以互相赋值。如:

inti;charc;i=’a’;c=97;是合法的。如果将i的值输出得到97。输出c可得字符‘a’。字符数据可以以字符形式输出,也可以用整数形式输出。例如在上面语句之后执行语句:

printf(”%c,%d\n”,c,c);

printf(”%c,%d\n”,i,i);

printf(”%c,%d\n”,i-32,i-32);3.6字符型数据输出的结果是什么?第23页,共52页,2023年,2月20日,星期三

(7)字符串常量

字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是一对双引号括起来的字符序列。如:

“Howdoyoudo。”,”CHINA”,”$123.45”都是字符串常量,可以输出一个字符串,如

printf(”Howdoyoudo.”);

charc;c=’a’;

right!

c=”a”;

error!c=”CHINA”,也是错误的。不能把一个字符串赋给一个字符变量。3.6字符型数据‘a’和“a”究竟有什么区别?第24页,共52页,2023年,2月20日,星期三

(7)字符串常量C规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。c规定以字符‘\0’作为字符串结束标志。‘\0’是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是,“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。如果有一个字符串,“CHINA”实际上在内存中是:3.6字符型数据CHINA\0它的长度6个字符,最后一个字符为’\0’。但在输出时不输出.例如:printf(”Howdoyoudo。”)输出时一个一个字符输出,直到遇到最后的’\0’字符,就知道字符串结束,停止输出。‘\0’,字符是系统自动加上的。第25页,共52页,2023年,2月20日,星期三3.7变量赋初值

程序中常需要对一些变量预先设置初值。C规定,可以在定义变量时同时使变量初始化。如:

inta=3;指定a为整型变量,初值为3

floatf=3.56;指定f为实型变量,初值为3.56

charc=’a’;指定c为字符变量,初值为‘a’

也可以使被定义的变量的一部分赋初值。如:

inta,b,c=5表示a、b、c为整型变量,只有c初始化,值为5。如果对几个变量赋以同一个初值,不能写成:

inta=b=c=3;

ERROR!而应写成:

inta=3,b=3,c=3;

RIGHT!

第26页,共52页,2023年,2月20日,星期三3.7变量赋初值初始化不是在编译阶段完成的(只有在后面介绍的静态存储变量和外部变量的初始化是在编译阶段完成的),而是在程序运行时执行本函数时赋以初值的。相当于有一个赋值语句,例如

inta=3;相当于:

inta;/指定a为整型变量

a=3;/赋值语句,将3赋予a/又如

inta,b,c=5;相当于:

inta,b,c;/指定a、b、c为整型变量/

c=5;/将5赋给c/

第27页,共52页,2023年,2月20日,星期三3.8各类数值型数据间的混合运算

整型、单精度型、双精度型数据可以混合运算。前已述及,字符型数据可以与整型通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。例如10+‘a’+1.5-8765.1234*‘b’是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按下图所示

double

float

long

unsigned

int

char,short第28页,共52页,2023年,2月20日,星期三3.8各类数值型数据间的混合运算图中横向向左的箭头表示必定的转换,如字符数据必定先转换为整数,short型转为int型,float型数据在运算时一律转换成双精度型,以提高运算精度(即使是两个float型数据在加化成double型,然后再相加)。

纵向的箭头表示当运算对象为不同类型时转换的方向。例如int型与doub1e型数据进行运算,先将int型的数据转换成图double型,然后在两个同类型(double型)数据进行运算,结果为double型。注意箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转成unsigned型,再转成1ong型,再转成double型。如果一个Int型数据与一个double型数据运算,是直接将int型转成double型。同理,一个int型与一个Long型数据运算,先将int型转换成1ong型。第29页,共52页,2023年,2月20日,星期三3.8各类数值型数据间的混合运算换言之,如果有一个数据是float型或double型,则另一数据要先转为double型,结果为double型。如果二个数据中最高级别为1ong型,则另一数据先转为1ong型,结果为1ong型。其它依此类推。举例说明:假设已指定i为整型变量,f为float变量,d为double型变量,e为1ong型,有下面式子:10十’a’+i*f-d/e运算次序为:①进行10+’a’的运算,先将‘a’转换成整数97,运算结果为107。②进行i*f的运算。先将i与f都转成double型,运算结果为dOuble型。③整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.000…00),结果为double型。④将变量e化成double型,d/e结果为double型。⑤将10十’a’+i*f的结果与”d/e结果为double型。上述的类型转换是由系统自动进行的。第30页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式3.9.1C运算符简介C的运算符有以下几类:

1.算术运算符(+-*/%)

2.关系运算符(><==>=<=!=)

3.逻辑运算符(!&&||)

4.位运算符(<<>>~|^&)

5.赋值运算符(=及其扩展赋值运算符)

6.条件运算符(?:)

7.逗号运算符(,)

8.指针运算符(*和&)第31页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式3.9.1C运算符简介C的运算符有以下几类:

9.求字节数运算符(sizeof)

10.强制类型转换运算符(类型)11.分量运算符(.→)

12.下标运算符([])

13.其它(如函数调用运算符())

第32页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式程序重要的一点是对数据按照算法进行处理(运算)。C语言的运算功能强大。数据通过运算符连接的式子称为表达式,表达式根据运算对象及运算关系得到一个值。分类介绍如下:⒈变量赋值运算格式:

V=expression;/*将expression的值赋给变量V*/inta=2;/*说明赋值,编译时赋值。*/intb;b=3+2;/*说明后赋值,执行时赋值。*/说明:⑴=是赋值号(动词);⑵赋值运算的左值只能是变量。a=a+2;iCount=iCount+10;a+2=12;/*Error!*/⑶赋值号两边类型应该一致,如不一致,以变量类型转换。inta=2.5;/*2a*/这里a的值等于2第33页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式1.基本的算术运算功能:完成各种类型数据的加、减、乘、除及求余数运算。双目算术运算(两个运算对象参加的运算)运算运算规则示例+加2+3-减a-b*乘2*(-a)/除12/3.0%求余数15%4只能对整型或字符型数据运算。余数符号与被除数相同。-12%5-2?-12%(-5)“向零取整”.-5/3=-1第34页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式2.算术表达式和运算符的优先级与结合级(附录III)表达式:数据通过运算符连接的式子C算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语言语法规则的式子。如:a*b/c-1.5+’a’

求表达式的值时,先按运算符的优先级别高到低的次序执行。

a+b*c–(x+y)/c算术运算符的结合方向为:“自左至右”

a-b+c如果参加运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算.如果一个运算符的两侧的数据类型不同,则会按右边所述,先自动进行类型转换,使二者具有同一种类型,然后进行运算。double

float

long

unsigned

int

char,short第35页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式3.强制类型转换运算符将一个表达式转换成所需类型

(double)a

(将a转换成double类型)

(int)(x+y)(将调x+y的值转换成整型)

(float)(5%3)(将5%3的值转换成float型)其一般形式为:

(类型名)(表达式)注意:表达式应该用括号括起来。如果写成

(int)x+y:只将x转换成整型,然后与y相加。需要说明的是在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。例如(int)x(不要写成int(x))如果x原指定为float型,进行强制类型运算后得到一个int型的中间变量,它的值等于x的整数部分,而x的类型不变(仍为float型,)第36页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式3.强制类型转换运算符将一个表达式转换成所需类型

main()/*test8.c*/{floatx;

x=3.6;i=(int)x;printf(“x=%f,i=%d”x,i);

}结论:两种类型转换:一种是系统自动进行类型转换一种是强制类型转换

当自动类型转换不能实现目的时,可以用强制类型转换。如:“%”运算符要求其两侧均为整型量,若x为float型,则“x%3”不合法,必须用:(int)x%3”。强制类型转换运算优先于%运算,因此先进行(int)x的运算,得到一个整型的中间变量,然后再对3求模。此外,在函数调用时,有时为了使实参与形参类型一致,可以用强制类型转换运算符得到一个所需类型的参数。第37页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式4.类型转换小结运算对象的类型相同,运算结果取运算对象相同的类型。inta;floatb;b=2/3;/*0b0.0*/a=5.0/2.0;/*2.5a0*/运算对象的类型不同,先将低等类型转换为高等类型后再进行运算,运算结果取高等类型。等级原则如下:charintlongdoublefloat2*16.0+15.0doublefloatdouble运算时可以实行类型的强制转换,格式如下:(type)expression只对当前表达式起作用。(float)a/(int)’c’+(float)(a+10)第38页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式4.自加、自减运算(单目运算):

本章重点、难点运算符前置后置运算关系++++aa++a=a+1

----aa--a=a-1说明:①运算对象只能是一个变量(不能对常量和表达式)。②前置是先运算,后引用,而后置则是先引用,后运算。2++;/*Error!*/inti,x;i=5;x=i++;/*x=i;i=i+1;*/i=5;x=++i;/*i=i+1;x=i;*/结合方向:自右至左第39页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式4.自加、自减运算(单目运算)自增、自减运算符的用法与运算规则示例。main()/***A1.c***/{

intx=6,y;

printf("x=%d\n",x); /*输出x的初值*/

y=++x; /*前置运算*/

printf("y=++x:x=%d,y=%d\n",x,y);

y=x--; /*后置运算*/

printf("y=x--:x=%d,y=%d\n",x,y);}第40页,共52页,2023年,2月20日,星期三3.9算术运算符和算术表达式5.有关表达式使用中的问题说明C运算符和表达式使用灵活a=3;j=(a++)+(a++)+(a++);printf(“a=%d,j=%d”,a,j);

结果为:a=6j=9如何理解?(test9.c)

i+++j为(i++)+j还是i+(++j)呢?

C编译系统在处理时尽可能多地(自左向右)将若干个字符组成一个运算符。

i+++j=(i++)+ji=3;printf(“%d,%d”,i,i++);(test10.c)

在多数系统中对函数参数的求值顺序是自右而左。故上面的结果为:4,3

第41页,共52页,2023年,2月20日,星期三3.10赋值运算符和赋值表达式1.赋值运算符赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a,也可以将一个表达式的值赋给一个变量。2.类型转换(重点、难点)如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。(1).将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=3.56”的结果是使i的值为3。(2).将整型数据赋给单、双精度变量时,数值下变,但以浮点数形式存储到变量中,如将23赋给float变量f,即f=23,先将23转换成23.000000,再存储在f中。如将23赋给double型变量d,即d=23,则将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到d中。第42页,共52页,2023年,2月20日,星期三3.10赋值运算符和赋值表达式(3).将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元中。

(4).字符型数据赋给整型变量时,由于字符只占一个字节,而整型变量为2个字节,因此将字符数据(8位)放到整型变量低8位中。有两种情况:

如果所用系统将字符处理为无符号的量或对unsignedchar型变量赋值,则将字符的8位放到整型变量低8位,高8位补零。例如:将字符‘\376’(八进制)赋给int型变量I0000000011111110如果所用系统将字符处理为带符号的量,若字符最高位为0.则整型变量高8位补0;若字符最高位为1.则高8位全补1,这称为“符号扩展”.这样做的目的是使数值保持不变,如变量c(字符、‘\376’)以整数形式输出为一2,i的值也是一2。1111111111111110第43页,共52页,2023年,2月20日,星期三3.10赋值运算符和赋值表达式(5).将一个int、short、long型数据赋给char变量时,只将其低8位原封不动地送到char型变量中。例:IntI=289;charc;c=I;0000000100100001(6).将带符号的整型数据(int型)赋给1ong型变量时。要进行符号扩展,如果int型数据为正值(符号位为0).则1ong型变量的高16位补0;如int型变量为负值(符号位为1),则1ong型变量的高16位补1,将整型数(int型)的16位送到1ong型低16位中,以保持数值不改变。反之,若将一个1ong型数据赋给一个int型变量,只将1ong型数据中低16位原封不动送到整型变量(即截断)00100001I=289C=33?Longb=‘\x6823’;inta;a=b;第44页,共52页,2023年,2月20日,星期三3.10赋值运算符和赋值表达式(7)将unsignedint型数据赋给longint,不存在扩展问题,只需将高位补0即可。将一个unsignedint型数据赋给一个占字节数相同的整型变量(例如unsignedint→int,unsignedlong→long,unsignedshort→short)将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。如:

unsignedinta=65535(216-1);intb;b=a;printf(“%d”,b);将a整个送到b中,由于b是int型,第1位是符号位,成了负数。(-1的补码)运行结果为:-1第45页,共52页,2023年,2月20日,星期三3.10赋值运算符和赋值表达式3.复合的赋值运算符(重点、难点)运算符表达式示例运算关系+=a+=3a=a+3-=b=cb=b-c*=a*=2a=a*2/=s/=ts=s/t%=a%=5a=a%5说明:①运算对象的左值只能是一个变量。(a+2)+=5;/*Error!*/②%=运算的对象,必须是整性。思考:a=12;a/=a+a;?a第46页,共52页,2023年,2月20日,星期三3.10赋值运算符和赋值表达式4.赋值表达式

赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。(结尾无分号)它的一般形式为:(变量)(赋值运算符)(表达

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论