本文共 4947 字,大约阅读时间需要 16 分钟。
基本类型:整型,字符型,浮点型(单精度型,双精度型),枚举类型
指针类型
构造类型:数组类型,结构体类型,共用体类型
空类型
对于基本数据类型量,按其取值是否可以改变又分为常量和变量两种。
在程序执行时,其值不发生改变的量称为常量,其值可变的量称为变量
用标识符代表表示一个常量称为符号常量,一般形式为:
#define 标识符(符号常量) 常量
#define也是一条预处理命令(预处理命令都是以”#”开头),称为宏定义命令。其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值
习惯上常量的标识符用大写字母,变量标识符用小写字母
#define PRICE 30void main(){ int num,total; num =10; total =num*PRICE; printf(“%d”,total);}
其值可以改变的量称为变量
一个变量应该有一个名字,在内存中占据一定的存储单元。
变量定义必须放在变量使用之前。一般放在函数体的开头部分。
要区分变量名和变量值是两个不同的概念
整形常量就是整常数。在C语言中,使用的整常数有八进制,十六进制和十进制
变量的存储方法在上面的变量的概念中已经提到。其数值是以二进制的形式保存的。
变量的值是以补码来表示的:
如:求-10的补码? 10的原码:00001010 取反:11110101 加一:11110110(第一位是符号位)
基本型:类型说明为 int ,在内存中占4个字节。
短整量:类型说明符为 short int 或 short 。2个字节
长整型:类型说明为 long int 或 long ,在内存中占4个字节。4个字节
无号型:类型说明符为 unsigned 。无符号短2字节,无符号长4字节
int a,b,c;unsigned d;
#includevoid main(){ short int a,b; a=32767; b =a+1; printf(“%d”,”%d\n”,a,b);}
输出结果为:32767,-32768
如果我们的编译器为16位实型常量也称为实数或者浮点数。
在 C 语言中,实数只采用十进制。它有二种形式:十进制小数形式,指教数形式
十进制数形式:也数码09和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均为台法的实数。注意,必有小数点。
指数形式:由十进制数,加阶码标志“ e ”或“ E ”以及阶码(只能为整数,可以带号)组成。其一般形式为: aEn ( a 为十进制数, n 为十进制整数)例如“2.1E5(2.1105),3.7E-2(3.710-2)
实型数据一般占4个字节(32位)内存空间。按照指数形式存储.如:3.14159在内存中。
这里的符号位1位,小数部分2~8位(包含指数符号位),指数部分24位。
小数部分占的位(bit)数越多,说明有效数字越多,精度也就越高
指数部分占的位数越多,则表示数组范围越大
单精度(float型).4个字节(32位)
双精度(doule)8个字节(64位)
长双睛度(long double)16个字节(128位)
由于实型变量是由有限的存储单元组成,因此能提供的有效数字总是有限的。
#includevoid main() { float a, b; a = 123456.789e5; b = a + 20; printf("%f",a); printf("%f",b);}
两次输出结果均为12345678848.000000。
因为此处发生了舍入误差,因为只把我们前面符合的数字。字符型数据包括字符常量和字符变量
字符常量是用单引号括起来的一个字符
例如:‘a’,’=’,’+’,’?’都是合法字常量。
在 C 语言中,字常量有以下特点:
1)字常量只能用单引号括起来,不能用双引号或其它括号。2)字符常量只能是单个字,不能是字符串。
3)字符可以是字集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如‘5’与5是不同的。
字符变量用来存储字符常量,即单个字符。
字符变量的类型说明符是 char 。字符变变量类型定义的格式和书写规则都与整型变量相同。
例如: char a , b ;转义字符转字符是一种特殊的字符常量。转义字符以反斜线”\”开头,后跟一个或几 个字符
转义字符具有特定的含,不同于字符原有的意义,故称“转义”字符
例如, “ \n ”就是一个转字,其意是回车换行”。转义字主要用来表示哪些用一般字符不便于表示的制代码。常见的转义字符有
\n换行,\t空格,\b退格,\r回车,\反斜杠符,\’单引号,\’’双引号每个字符变量呗分配一个字节的内存空间,因为只能存放一个字符,字符值是以ASCLL码形式存在在变量的内存单元之中。
字符串常量是由一对双引号括起来的字符序列。例如:”CHINA”,“C program”,”$12.5”均为合法字符
字串常量和字符常量是不同的量
它们之间主要有以下区别:(补充: char 占八位)字符常量单引号括起来,字符串常量用双引号括起来。
字符常量只能是单个字符,字符串常量则可以含一个或多个字符。
可以把一个字符常量赋予一个字符变量,但不能一个字符串常量赋予一个字符变量。例如:char a =‘a’; 而不能char a =“a
字符常量占一个字节空间。字符串常量占的内存字节数等于字串中字节数加1。
增加\0的一个字节中存放字符 “\o "(ASCI1码为0)。这是字符串结束的标志。变量的数据类型是可比以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。
自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成
自动转换尊循以下规则:
若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
转换按数据长度增0的方向进行,以保证精度不低。如int型和long 型运算时,先把 int 量转成long型后再进行运算。
所有的浮点运算都是以双精度进行的,即使仅含 float 单精度量运管的表达式,也要先转换成 double 型,再作运算。
char 型和 short 型参与运算时,先转换成 int 型。
在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型转换为左边量的类型。如果右边量的数据类型长度长于左边时,会出现精度损失。丢失的部分按四舍五入向前舍入。
#includevoid main() { float PI = 3.14159; int s, r = 5; s = r*r*PI; printf("s=%d\n", s);}
此时应该将s声明为float类型
强制类型转换是通过类型转换运算来实现的。
例如:( float ) a 把 a 转换为实型(int ) (x+y)把 x + y 的结果转换为整型
在使用强制转换时应注意以下问题:
类型说明和表达式都必加括号(单个变量可以不括号),如把( int ) (x+ y) 写成 (int )x+y 则成了把 x 转换成 int 型之后与 y相加了。
无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定的类型。
“+”,“-”,“*”,“/”, ”%”
注意”/”的计算结果是舍去小数位的。且如果一个是实型,那么结果为双精度实型。
左结合性:如1+2。用1加上2。
右结合性表示-x,表示为x的左边,加上负号
“=”号是右结合性。=号后面的值计算完之后赋值给左边
C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理
C 语言中运算符的结合性分为两种、即左结合性和右结合性。
算术运算符的结合性是自左至右
如有表达式x-y+2,则y 应先与“-”号结合,执行- y 运,然后再行+2运算。
这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”
最典型的右结合性运算符是赋值运算符
++i
:i自增1后再参与其他运算--i
:i自减1后再参与其他运算i++
:i参与运算后,i的值再自增i--
:i参与运算后,i的值再自减void main() { int i = 5, j = 5, p, q; p = (i++) + (i++) + (i++); q = (++j) + (++j) + (++j); printf("%d,%d,%d,%d", p,q,i,j);}
输出结果为:VS2015。据说不同的编译器具有不同的结果。VS2015是计算所有括号里面的再最后统一进行相加
在赋值符”=”之前加上其他二目运算符课构成符合赋值符。如:+=等
在C语言中逗号”,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号运算符。
一般形式为:表达式1,表达式2
转载地址:http://ctxmj.baihongyu.com/