C语言的数据类型和运算Word文件下载.docx
- 文档编号:19270541
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:30
- 大小:118.29KB
C语言的数据类型和运算Word文件下载.docx
《C语言的数据类型和运算Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言的数据类型和运算Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
2字节:
-32768~32767
4字节:
约-21亿~21亿
shortint
short
2
longint
long
4
signedint
signed
2或4(同int)
同int
Unsignedint
unsigned
2或4(同int)
2字节:
0~65535
4字节:
约0~42亿
signedshortint
signedshor
Unsignedshortint
unsignedshort
singedlongint
signedlong
Unsignedlongint
unsingedlong
float
float
4
绝对值约
13.4e-38~13.4e+38
double
double
8
绝对值约:
1.7e-308~1.7e+308
longdouble
>
=8
由具体实现定义
说明:
①signed和unsigned不能同时修饰char,short和long或signed和unsigned不能同时修饰int。
float不能使用任何修饰词,double可用long修饰;
②int的长度与具体机器的字长相同,在16位机上为2字节,在32位机上为4字节。
因此,int的长度与short或long相同。
③signedchar用1个字节的低7位表示字符值,最高位表示符号。
unsignedchar用整个字节表示字符值,无符号位。
char表示有符号和无符号与具体机器系统有关,但char一定和signedchar或unsignedchar其中之一同。
在多数机器系统中,char与signedchar同。
④浮点类型的范围与浮点在机器内的表示有关,标准C没有规定浮点数格式,大多数机器浮点数格式为:
对于4个字节浮点数,阶码占8位,尾数占23位,1位符号位:
对于8字节的浮点数:
在浮点数中尾数位决定精度(有效数字位数),阶码决定取值范围。
⑤对于带符号的数据类型,一般用最高位(左边第1位)表示符号,0表示正,1表示负,数值以补码形式存放(一个正数的补码是该数的二进制数),如(10)补为0000000000001010。
一个负数的补码为取反加1,如(-10)补为111111*********0。
表中列出的short,int,long是带符号的(隐含signed);
⑥对于无符号的数据类型,最高位不作为符号,与其它各位一起表示数值,因此,无符号数只表示正数不表示负数,与同样长度的带符号正数相比表示的最大数扩大了一倍。
⑦字符型数据也分为signed和unsigned。
ANSI标准ASCII码字符的允许取值范围为0~127,用7位表示就可以了,最左位补0表示正数。
有些计算机系统,除ASCII码字符外,还扩展使用一些图形符号(如“≥”),扩充使用用128~255,其第一位为1。
因此,对signed字符型数取值范围为-128~127。
对unsigned字符型,取值范围为0~255;
⑧实数类型数据无signed、unsigned之分;
⑨以后各章均使用类型的简写形式;
⑩C语言提供了一个测试某一类型数据所占存储空间长度的运算符sizeof,格式为sizeof(类型标识符)。
如sizeof(char)为1,sizeof(long)为4。
2.2常量和变量
C的常量有两种形式:
一种是文字常量,简称常量或常数,文字常量是由表示值的文字本身直接表示的常量,如123,3.14159;
另一种是符号常量,是用标识符表示的文字常量(标识符一般用大写英文字母),标识符是文字常量的名字。
任何一个常量都属于一个数据类型,文字常量的类型由文字常量自身隐含说明,如123为整型,3.14159是一个浮点型,符号常量的类型由定义时指定。
2.2.1常量的表示
C的常量有整数常量、浮点常量、字符常量、字符串常量和枚举常量。
1.整数
整数有三种形式:
十进制整数、八进制整数和十六进制整数。
①十进制整数
十进制整数由数字0~9组成的数字串,多位数时最左第一个数字不能为0,前面可以有表示正负的符号“+”或“-”,“+”可以省略。
如738 -50 0 +39 是合法的整数。
②八进制整数
八进制整数由数字0~7组成的数字串,第一个数字必须为0(前导零),它是八进制数的标志,八进制一般用于表示无符号数如:
0137 027 +013 -024 是合法的八进制整数,而0128非法。
八进制可以与十进制转换:
如0137=1*82+3*81+7*80=95
若将95转换为八进制:
③十六进制整数
十六进制整数是由数字0~9和字母a~f(或A~F)组成的符号串,符号串必须以0x或0X(十六进制的前缀)开头,十六进制表示无符号整数,如0x13a 0xc32 0xff 0xb800 0xdc都是合法的十六进制整数。
013a x13a 13a均为非法。
①所有整数的缺省类型是int,通过在其后面加后缀字母,可以表示长整数(long)无符号整数(unsigned)和无符号长整数(unsignedlong)。
长整数:
在任意进制整数后面加l或L,如27l 018l 0x1aL
无符号整数:
在任意进制整数后加u或U。
如27u 0400U 0x1aU
无符号长整数:
任意进制的整数后加ul或UL。
如:
27ul 0400UL 0x1aUL.
后缀字母大小写任意,由于l与数字1容易混,常用L。
②当整数的值超出int类型所能表示的范围时,称为整数溢出。
整数溢出会产生不正确的结果,为避免溢出或类型转换的需要,应根据具体情况将整数相应地表示为长整数、无符号整数或无符号长整数,如在16位机上,整数123456会产生溢出,应表示成123456L.
2、浮点数
浮点数的一般形式为:
[±
][整数部分][.][小数部分][e±
n]
其中[]表示可选项,e±
n称为指数部分,1e±
n表10±
n,“e”可以写成“E”。
n称为阶码(1~3位十进制无符号常整数,可以有前导0但仍表示十进制),n前面的“+”可以省略。
如
-123.567e+5-123.567E5-123.567e05都是代表值-12356700.0
浮点数的组成规则如下:
1一个浮点数可以无整数部分或小数部分,但不能二者均无。
2一个浮点数可以无小数点或指数部分,但不能二者均无。
例如:
3.141593 .1E+02-.234e+5–243.e-22.01234e+30..08100.0都是合法的浮点数。
若将2.01e+3写成2010,将0.写成0,或将100.写成100则它们不是浮点数而是整数。
下面一些是非法表示:
-.e+1既无小数部分也无整数部分
1.1e-0.5:
阶码不是整数
1.1e+I:
阶码不是常量(除非I已定义为符号整型常量)
当浮点数超出它的类型所能表示的范围产生浮点溢出。
如果浮点数的绝对值小于所能表示的最小值则下溢。
如1.7e-309和-1.7e-309均产生下溢。
下溢时绝对值太小以致机器不能表示而产生零值,称之为“机器零”。
下溢时机器可能不能正常运行。
当浮点数的绝对值大于所能表示的最大值时产生上溢,如1.7e309和-1.7e309均产生上溢。
上溢时将产生错误的结果。
浮点数的缺省类型是double,通过在浮点数后面加后缀字母可以表示单精度(float)数、双精度数(double)和高精度(langdouble)数。
单精度浮点数:
在浮点数后面加f或F。
3.14159F。
双精度浮点数:
在浮点数后面加d或D。
3.14159d。
高精度浮点数:
在浮点数后面加l或L。
3.14159L。
在程序中可根据存储的需要、精度的需要或类型转换的需要将浮点数表示为适当的类型。
3、字符常数
字符常数通常是指一对单引号(单撇号)括起来的一个字符,形式为:
‘字符’
字符常数可以被看成是一个整数,值为该字符的ASCII码值。
字符常数有两种表示方法。
(1)用字符的图形符号表示一个字符,形式为:
‘字符的图形符号’
字符的图形符号是指可打印字符,ASCII码字符集中,字符码为32~126的字符是可打印字符,因而这种方法只适用于部分字符。
‘’‘a’‘B’‘+’‘3’‘>
’‘~’
注意:
‘a’和a表示两种完全不同的概念,‘a’是一个字符常数,a是由单个字母构成的标识符。
另外,在可打印字符中,有两个特殊字符不能用图形符号来表示,它们是单引号本身(’)和反斜线(\)。
即‘‘’‘\’是非法表示,要想表示它们必须用转义序列表示。
(2)用转义序列表示一个字符,形式为:
‘转义序列’
转义序列是由反斜线(\)开头的一个特殊字符串,每个转义序列表示字符集中的一个字符,转义序列及其表示的字符如表2.2所示。
表2.2转义序列
转义
序列
ASCII字符码
表示的字符
十进制
八进制
十六进制
\0
\a
\b
\f
\n
\r
\t
\v
\\
\?
\’
\”
\ooo
\xhh
0
7
8
12
10
13
9
11
92
63
39
34
014
012
015
011
013
134
077
047
042
000~377
0x00
0x07
0x08
0x0c
0x0a
0x0d
0x09
0x0b
0x5c
0x3f
0x27
0x22
0x00~0xff
空字符
响铃字符
退格字符
换页字符
换行字符
回车字符
水平制表字符
垂直制表字符
反斜线字符
问号字符
单引号字符
双引号字符
以ooo为字符码的字符
以xhh为字符码的字符
(1)从表中可以看出,转义序列有两种形式:
一种是反斜线后跟一个图形符号;
另一种转义序列的位型“\ooo”和“\xhh”。
前者表示常用的控制字符(字符码为0~31的字符),如‘\n’表示一个换行字符,其ASCII码为十进制10。
后者可以表示字符集中的任一字符(字符码为0~255的所以字符)。
(2)位型中的ooo表示1~3个八进制数字,可以不用前缀0;
hh表示1~2个十六进制数字,x是前缀不能省。
水平制表符可用下列任一种形式表示:
‘\t’ ‘\011’‘\11’‘\x0b’‘\xb’
字符A可用下列任一种形式表示:
‘A’ ‘\101’‘\x41’
(3)单引号和反斜线字符虽然是打印字符,但编译程序规定必须用转义序列表示。
单引号字符可用下列任一种形式表示:
‘\’’‘\047’‘\47’‘\x27’
反斜线字符可用下列任一种形式表示:
‘\\’‘\0123’‘\123’‘\x5c’
(4)双引号字符常数可以用图形符号或转义序列任一种形式表示。
‘“’ ‘\”’‘\042’‘\x22’
(5)字符‘\0’是值为0的字符(空字符),不是空白字符。
‘\0’除表示0值外,它强调对象的类型是字符型。
也就是说,表示值为0的字符用‘\0’比用0好。
4、字符串
C语言没有字符串类型,但可以表示字符串常数,字符串变量是用字符数组来表示的。
字符串常数(简称字符串)是用一对双引号括起来的一个字符序列,其字符的个数称为字符串长度。
形式为:
“字符序列”
双引号是字符串的定界符而不是字符串的组成部分,双引号中的任何一个字符都是一个字符常数,形式为不带单引号的字符(图形符号或转义字符)。
“Thisisastring\n”
一个字符串可以包含0个字符,表示为“”(两个相邻的双撇号),称为空串。
字符串在机内存储时,系统自动在其末尾加了一个‘\0’,‘\0’是字符串的结束标志,以确定字符串的实际长度,字符串的存储长度比实际长度大1。
空串的存储长度为0,存储长度为1。
(1)“a”和‘a’是两个不同的概念。
(2)当双引号作为字符串的组成字符时,必须用转义序列表示。
“\”\”isaemptystrinng”
表示:
“” isaemptystrinng
(3)当单引号作为字符串的组成字符时,可以用图形符号表示,也可以用转义字符表示,如:
“It’sapen.”“It\’sapen.”
(4)字符串可以连接。
被连接的两个字符串之间可以有0个或多个空白字符,但不能有其它字符。
“Hello,”“howareyou?
” 等价于
“Hello,howareyou?
”
字符串连接主要用于源程序中表示长度跨越多行的字符串。
printf(“Hello,
howareyou?
”);
是非法的。
因为语法规定字符串常数必须书写一行。
如果一行写不下可用两种方法:
printf(“Hello,\
Howareyou?
/* \是续行符 */
或:
printf(“Hello,”
“howareyou:
2.2.2符号常量
为使程序易于阅读和便于修改,可以给程序中经常使用的常量定义一个有一定含义的名字,这个名字称为符号常量。
符号常量是一个标识符,有三种方法定义一个符号常量:
一种是利用编译预处理的宏替换功能#define;
另一种是用const类型限定符说明并初始化一个标识符;
第三种方法是通过定义枚举类型来定义符号常量(以后讲)。
1.用#define定义符号常量
形式:
#define标识符常量表达式
常量表达式是值为常量的表达式,一般为已定义的符号常量或文字常量,也可以由运算符连接常量形成的表达式;
标识符是符号常量的名字,它代表常量表达式所表示的文字。
#defineSIZE100
#definePI3.1415926
#defineBLANK‘ ’
#defineTWO_PI2.0*PI
注:
●符号常量的名字(标识符)一般用大写字母。
●#define行不是C语句,而是编译程序的预处理控制,因此其后面不加“;
2.用const定义符号常量。
const类型区分符标识符=常量表达式;
符号“=”左边的标识符被定义为常量,标识符代表常量表达式的值。
constintMAX=1000;
constdoublePI=3.14159;
constcharBLANK=‘ ’;
constsignedTRUE=1,FALSE=0;
说明:
用#define和const定义的符号常量在实现上有本质不同。
#define在编译预处理时用常量表达式去替换程序中所有出现的常量标识符,标识符没有对应的存储单元;
由const说明的标识符是一个不可更改的左值,编译时要给它分配存储单元。
应用举例:
计算圆柱体的体积V=πr2h
#include“stdio.h”
voidmain(void)
{floatv,r,h;
printf(“inputr,h:
”);
scanf(“%f%f”,&
r,&
h);
v=3.14159*r*r*h;
printf(“v=%f\n”,v);
}
如果使用符号常量:
#definePI3.14159
viodmainvoid)
prinrf(“inputr,h:
scanf(“%f%f”,&
e,&
v=PI*r*r*h;
printf(“v=%f\n”,v);
}
2.2.3变量说明
变量:
在程序中其值可变的量,每一个变量都有一个名字(标识符),称为变量名。
常量的类型是由常量自身隐含说明的,不需要做显示说明,而变量的类型必须做显示说明。
C程序中任何变量必须遵循先说明后引用的原则,以便编译程序为变量分配适当长度的存储单元以及确定变量所允许的运算。
变量说明的形式:
类型区分符变量表。
类型区分符:
说明变量中所列变量的数据类型。
变量表由一个或多个变量名组成,多于一个变量时中间用逗号“,”隔开。
一个说明结束必须用分号“;
”。
intage,index;
与
intage;
intindex;
等价
程序中有些变量在使用前需要设置初值,如作为计数器使用(如n++;
)和做累加和的变量(如sum=sum+x)通常置初值为零,做累乘积的变量(如time=time*y)通常置初值为1。
给变量赋初值有两种方式:
一是通过赋值语句置初值(如i=0;
);
另一个方式是在变量说明时给出初值称为初始化,格式为:
类型区分符变量名=表达式,…;
intage=15,index=1,i=0,j=0;
inti=j=0;
非法。
因为i=j=0等价于i=(j=0),而(j=0)是赋值表达式。
inti,j=0;
j被初始化为0;
i的初值不确定。
charc=”y”;
doubleesp=1.0e-5;
引用一个没有值的变量非法。
2.3运算符和表达式
C的运算符十分丰富。
由运算符通过对运算对象(操作数)进行各种操作,按操作数的数目可将运算符分为:
单目(一元),双目(二元)和三目(三元)运算符;
按运算符的功能分类有:
算术运算符、关系运算符、逻辑运算符、自增和自减运算符、位运算符、赋值运算符和条件运算符。
另外还有数组的下标[]、函数调用()、表顺序求值的逗号运算符和类型强制运算符等。
表达式是由运算符、操作符数组成的符合C的语法算式。
从本质上说,表达式是对运算规则的描述并按规则执行运算,运算的结果是一个值,称为表达式的值,其类型称为表达式的类型。
单个操作数也是表达式。
常量、变量、有返回值的函数调用和用()括起来的表达式称为简单表达式。
由简单表达式和以简单表达式为操作数的表达式都是表达式。
如y=3+(x+4)“=”称为赋值运算符
表达式的运算规则是由运算符的功能和运算符的优先级与结合性决定的。
为使表达式按一定的顺序求值,编译程序将所有运算符分成若干组,每组规定一个等级称为运算符的优先级,优先级高的先执行运算。
处于同一优先级的运算符的运算顺序称为运算符的结合性。
运算符的结合性有从左至右(左结合)和从右至左(右结合)两种。
表2·
2运算符的优先级和结合性
优先级
运算符
结合性
()[]→·
左结合
!
~++--+(单目)—(单目)&
sizeof(类型名)
右结合
3
/%
+(双目)—(双目)
5
<
>
6
<
=>
=
7
==!
&
9
∧
10
|
11
12
||
13
?
:
14
=+=—=*=/=%=&
=^=|=<
2·
3·
1算术运算
算术运算符包括+(单目)—(单目)+(双目)—(双目)*/(实数式整数)%(整数)
双目+,—,*,/,的操作数可为任何整数式或浮点数。
对于“+”“—”还可以用于指针加(减)一个整数。
双目运算符的两个操作数类型可以不同,运算时自动转换成相同的类型(以后介绍)。
基本原则是值域较窄的类型向较宽的类型转换。
13+5结果为整数18两个操作数类型相同不转换
13.0+5结果为18.0将5转换为5.0后运算
‘d’-97结果为整数3,‘d’的类型为char,先将‘d’转换成整数100再运算
对于除运算符“/”,如果两操作数都是整数则执行整数除,结果也是整数,值为商的整数部分,小数部分被截去;
若至少有一个操作数为浮点数则执行实数除,结果为浮点数。
15/5结果为整数3
1/2结果为整数0
—8/5结果为整数—1
1.0/2或1/2.0结果为实数0.5
或1.0/2.0
对于求余运算符%,规定两操作数必须为整数,运算结果也为整数,值为左操作数除以右操作数所得的余数,符号与左操作数相同。
17%5或17%-5结果为整数2
-17%5或-17%-5结果为整数-2
5%10结果为整数5
10%5结果为整数0
整数除和求余运算存在下列关系:
a%b=a-a/b*b其中a,b均为整数
下面是一个由算术运算符连接操作数构成的表达式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数据类型 运算