目录
数据类型
基本类型:整数类型、浮点型、字符类型
整数类型
整型数据类型 | 名称 | 字节数 | 取值范围 |
[signed] int | 整型 | 4 | (-2^31~2^31-1) |
unsigned int | 无符号整型 | 4 | (0~2^31-1) |
[signed] short [int] | 短整型 | 2 | (-2^15~2^15-1) |
unsigned short [int] | 无符号短整型 | 2 | (0~2^16-1) |
[signed] long [int] | 长整型 | 4 | (-2^31~2^31-1) |
unsigned long [int] | 无符号长整型 | 4 | (0~2^32-1) |
说明:c没有具体规定各种类型数据所占用储存单元的长度,只要求sizeof(short)<=sizeof(Int)<=sizeof(long),具体有个编译系统自行决定的。sizeof是测量类型或变量长度的运算符。
浮点类型
浮点数:实数的指数形式。
浮点类型 | 字节数 | 有效数字 | 数值范围(绝对值) |
float(单精度浮点型) | 4 | 6 | 正数部分:0,以及1.2*10^-3.8~3.4*10^38 |
double(双精度浮点型) | 8 | 15 | 正数部分:0,以及2.3*10^-308~1.7*10^308 |
long double(长双精度浮点型) | 8 | 15 | 正数部分:0,以及2.3*10^-308~1.7*10^308 |
16 | 19 | 正数部分:0,以及3.4*10^-4932~1.1*10^4932 |
注意:用二进制表示一个实数以及存储单元的长度是有限的,只能存储成有限的精确度。小数部分占的位数愈多,数的有效数字愈多,精确度也就愈高。指数部分占的位数愈多,则能表示的数值范围愈大。
表示方法:(1)十进制小数形式:由数字和小数点组成
(2)指数形式:“十进制小数或整数”+"e(或E)“+”十进制整数“,e(或E)的两边必须有 整数,不能省略。
字符类型
类型 | 名称 | 字节数 | 取值范围 |
[unsigned] char | 有符号字符型 | 1 | -128~+127 |
unsigned char | 无符号字符型 | 1 | 0~+125 |
ASCII字符集包括:
- 字母:A~Z,a~z
- 数字:0~9
- 专门符号:29个,包括!# & +/ , . ; ‘ "[|] {\} ()* - < > = ^ ~ ` : ? _
- 空格符:空格,水平制表符,垂直制表符,换行,换页不能显示的字符:空字符('\0'),警告('\a'),退格('\b'),回车('\r')等
注:表示字符时可以用' '将字符括起来,也可以直接用ASCII中的编码值表示。
转义字符:以"\"引导的特殊常量表示。
\ddd:3位八进制数表示的ASCII码对应的字符
\xhh:2位六进制数表示的ASCII码对应的字符
注:
- 只能用小写字母,每个转义字符看作一个字符。
- 转义字符'\v'与‘\f'不影响屏幕输出,仅影响打印机的打印输出。
- 在C语言中,不可打印的字符都使用转义字符表示。
- 字符类型的储存:内存中,以二进制的ASCII码形式存储。
- 一个字符型数据,既可以以字符形式输出,也可以整数形式输出。
标识符与关键字
标识符
标识符:是有效字符数列,是一个对象的名字。用于表示用户自己定义的变量、符号常量、函数名、数组名、类型名等。
命名规则:
- 不能是关键字
- 只能由字母、数字和下划线组成,且区分字母大小写。
- 名称的第一个字符必须是字母或下划线,不能是数字。
- 名称中间不能有空格。
- 标识符可以为任意长度,但最好不要超过31个字符。
- 不要与C语言库函数名称相同。
提示:名称需要多个单词组合时可以采用匈牙利名称法。
关键字
定义:又称保留字,是C语言预先预定好的字符数列,不能作为标识符。
ANSIC中有32 个关键字:
存储类声明:auto const double float int short struct unsigned
数据类型声明:break continue else for long signed switch void
运算符:case default enum goto register sizeof typedef volatile
程序语句:char do extern if return static union while
关键字在程序设计的IDE中将会以特殊样貌显示,如在DEVC++中会加粗。
运算符与表达式
表达式:由操作数和运算符组成的序列,算术中四则混合运算类似,其中操作数可以是常量也可以是变量。
运算符;单目运算符 取负运算符(-)
双目运算符 算术运算符(+)
三目运算符 条件运算符(?:)
优先级:各类运算在一个表达式中的运算顺序。
规律:单目高于双目,双目高于三目,三目高于赋值。双目运算中10个优先级 顺序:算术高于位移,位移高于关系,关系高于位逻辑(不包括单目位逻辑运算符),位逻辑高于逻辑。
结合性:当一个运算量两侧的运算符优先级相同时运算的结合方向。如3+1-2,从左到右。
除单目运算符、赋值运算符和条件运算符是右结合性外,其他都是左结合性。
算术运算符
加法运算符 | 减法运算符 | 乘法运算符 | 除法运算符 | 求余运算符 |
+ | - | * | / | % |
- %运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。
两个实数相除的结果是双精度实数,两个整数相除的结果为整数。
(1)除法运算1/2=0,1.0/2=0.5
(2)求余数运算
#include<stdio.h>
int main()
{
printf("%d\n",5%3);
printf("%d\n",5%-3);
printf("%d\n",-5%3);
printf("%d\n",-5%-3);
return 0;
}
优先级:( ) * / % + -
结合性:从左至右
关系运算符
关系运算符实际是比较运算符。
小于 | 大于 | 小于等于 | 大于等于 | 等于 | 不等于 |
< | > | <= | >= | == | != |
优先级:<, >,<= ,>=高于==,!=
结合性:从左至右
逻辑运算符
非 | 与 | 或 |
! | && | || |
- 逻辑运算中,非零当做真,0作为假,因此任何类型的数据都可以参与到逻辑运算。
- 在C语言中,1为真,0为假。
优先级:!>&&>II
结合性:从左至右
在一个&&表达式中,如果&&左侧为假,则C语言不判断右侧。在II表达式中左侧为真,则C语言不判断右侧。
位运算符
按位与 | 按位或 | 按位取反 | 按位异或 | 左移 | 右移 |
& | | | ~ | ^ | << | >> |
注:分析位运算的结果时,先将运算的整数转换为二进制再进行按位运算。
左移:左移运算符是一个二元运算符,需要两个运算量参与,且必须是整数。如a<<n,表示将a按照二进制的最高位n位舍弃,最低的为用0补齐。
右移:最的位舍弃,最高的位补齐。补齐的数值根据运算类型决定。如果运算量是一个有符号整数则补其符号位,如果是无符号的整数则最高位补0.
自增自减运算符
++i,--i 在使用i之前,先使i得值加\减1,先增减,后运算。
i++,i-- 在使用i之后,先使i得值加\减1,先运算,后加减。
结合性:自右向左
++与-是同优先级自增,自减运算符不能用于常量和表达式。
赋值运算符
赋值运算符:=
赋值表达式:[变量]=[表达式]
优先级:!>算术>关系>&&和II>赋值
结合性:从右至左复合赋值运算符:由赋值运算符之前再加一个双目运算符构成。
复合赋值运算一般格式:表达式1 op=表达式2
等价于:表达式1=表达式1 op
*=,/=,%=,+=,-=,^=,<<=,>>=,&=,|=,
优先级:与=同优先级
结合性:从右至左
逗号运算符
作用:将几个表达式隔开
优先级:最低
结合性:从左至右
整个表达式的值:最后一个表达式的值
注:C语言常用逗号作为分隔符。
条件运算符
条件运算符:?:
作用:判断一个逻辑表达式的结果,如果为真则指定执行某个表达式,如果为假则指定执行另外的表达式。条件表达式的实质就是起程序控制作用。
表达式1?表达式2:表达式3
求值规则:先求1,若为真(非0),求解2,并将2的值作为整个表达式的值;若1为假,求解3, 并将3的值作为整个表达式的值
求字节数运算符
sizeof()运算符是一个单目运算符,用于计算一个某类型的运算量所占用的字节数。
sizeof(类型标识);
sizeof(变量名);或sizeof 变量名;