基本数据类型及运算
基本数据类型
数据类型 | 类型关键字 | 长度 | 位数 | 范围 |
---|---|---|---|---|
字符型 | char | 1字节 | 8 | -128~127 |
整型 | int | 2字节 | 16 | -32768~32676 |
单精度浮点型 | float | 4字节 | 32 | – |
双精度浮点型 | double | 8字节 | 64 | – |
注: 标准C语言没有具体规定整型数据所占内存的字节数,各种编译程序根据CPU类型,取计算机系统的字长或字长的整数倍作为整型数据的长度。
C语言还使用类型修饰符:
- short int——表示短整型,其长度一般与int相同
- long int——表示长整型,其长度一般为双字长
- unsigned int——比阿诗无符号整型数,其最高位为数字位而不是符号位
带符号整数的最高位为符号位,0表示正整数,1表示负整数。
- 补码:正数的二进制补码与原码相同,负数的二进制补码则为原码符号位不变,其余数值位变反加一。
- 无符号整型数的最高位亦为数值位,所以它表示的最大数的绝对值大于有符号的整数。
类别 | 名称 | 类型说明符 | 长度/位 |
---|---|---|---|
整型 | 短整型 | short int | 16 |
整型 | int | 16 | |
长整型 | long int | 32 | |
无符号短整型 | unsigned short int | 16 | |
无符号整型 | unsigned int | 16 | |
无符号长整型 | unsigned long int | 32 | |
字符型 | 字符型 | char | 8 |
无符号字符型 | unsigned char | 8 | |
浮点型 | 单精度浮点型 | float | 32 |
双精度浮点型 | double | 64 |
常量
常量是指在程序执行过程中其值不发生变化的量。
- 整型常量:%d, %x, %o分别按十进制、十六进制、八进制输出对应的输出项。
- 浮点数常量:C语言中的浮点数以十进制数表示,不能用八进制和十六进制数表示。浮点数分为小数形式和指数形式。其中指数形式:<整数部分>.<小数部分>e(或E)<指数部分>。
- 字符常量:字符常量是指用一对单引号括起来的一个字符。字符常量中的单引号只是起定界作用并不代表字符本身。C语言中字符常量是按整数存储的,所以字符常量可以像整数一样,在程序中参与相关运算。
- 字符串常量:字符串常量是指用一对双引号扩起来的一串字符。双引号只作定界符使用。C语言中,字符串常量在内存中存储时,系统自动在字符串的末尾加一个串结束标志,即NULL(“\0”)。
- 转义字符:转义字符通常表示ASCII码字符集中不可打印的控制字符和特定功能的字符。
- 符号常量:C语言允许将程序中的常量定义为一个标识符,称为符号常量。符号常量一般使用大写英文字母表示,以区别一般用小写字母表示的变量。符号常量在使用前须先定义,定义的形式是:#define <符号常量名><常量>
变量
变量是在程序执行过程中其值可以改变的量。
- 变量的定义:C语言规定,所有变量在使用前必须先定义,定义一个变量应说明其变量名、数据类型及长度等,格式:<数据类型> <变量名表>;
- 变量的初始化:C程序中的变量不仅必须先定义再使用,而且在表达式中的变量必须具有确定的值。
- 变量地址:一个变量被定义后,系统将根据变量的数据类型为其分配一定长度的存储空间。如果变量的内存空间包括多个存储单元,通常把单元首地址称为变量地址。
基本运算
算数运算
运算类型 | 运算符 | 名称 | 例子 |
---|---|---|---|
双目运算 | + | 加 | a+b |
- | 减 | a-b | |
* | 乘 | a*b | |
/ | 除 | a/b | |
% | 取余 | a%b | |
单目运算符 | ++ | 自增 | a++或++a |
– | 自减 | a–或–a | |
- | 取负 | -a |
自增运算符“++”和自减运算符“–”是C语言特有的两个单目运算符。前置运算先增值后引用,后置运算先引用后增值
赋值运算
由赋值运算符“=”将变量和表达式连接起来的式子称为赋值表达式。其形式
:<变量>=<表达式>; C语言赋值表达式中“<表达式>”还可以是另一个赋值表达式。
当赋值运算符两边的数据类型不同时,由编译程序自动进行类型转换,将赋值运算符右边表达式的数据类型转换成左边变量的类型。
算术赋值运算
运算符 | 名称 | 例子 |
---|---|---|
+= | 加赋值 | a+=b |
-= | 减赋值 | a-=b |
*= | 乘赋值 | a*=b |
/= | 除赋值 | a/=b |
%= | 取余赋值 | a%=b |
关系运算和逻辑运算
关系运算主要用在C语言的控制结构中,是用于比较两个数据间特定关系的一种运算。
运算符 | 名称 | 例子 |
---|---|---|
> | 大于 | a>b |
< | 小于 | a<b |
== | 等于 | a==b |
>= | 大于等于 | a>=b |
<= | 小于等于 | a<=b |
!= | 不等于 | a!=b |
关系表达式的值按比较结果分为逻辑真和逻辑假。C语言把任何非零的数值都作为逻辑真,仅把零值作为逻辑假。
字符型数据根据其ASCII码值进行比较。
逻辑运算
运算符 | 名称 | 例子 |
---|---|---|
&& | 逻辑与 | a&&b |
|| | 逻辑或 | a||b |
! | 逻辑反 | !a |
C语言规定逻辑运算符和关系运算符由高到低的优先次序:!–>关系运算符–>&&和||。
位运算
位运算是指二进制位的运算,这类运算使编程人员可以完成很多汇编级的工作。位运算包括位逻辑运算和移位运算。
位运算符中除位反“~”为单目运算外,其他均为双目运算。
运算符 | 名称 | 例子 |
---|---|---|
& | 按位与 | a&b |
| | 按位或 | a!b |
^ | 按位异或 | a^b |
~ | 按位取反 | ~a |
>> | 右移位 | a>>2 |
<< | 左移位 | a<<2 |
按位逻辑运算与逻辑运算的区别:前者是对数据每个二进制位的操作,而后者是对数据整体的操作。
在移位过程中,变量一端被移出的位被舍弃,另一端空出的位补0.
在计算机系统中常常采用移位运算,以便快速实现乘法和除法的运算:每左移1位等效于乘以2,每右移1位等效于除以2。
位赋值运算
运算符 | 名称 | 例子 |
---|---|---|
&= | 位与赋值 | a&=b |
|= | 位或赋值 | a|=b |
^= | 位异或赋值 | a^=b |
>>= | 右移赋值 | a>>=b |
<<= | 左移赋值 | a<<= |
其他运算
- 三目条件运算:e1?e2:e3
其中3个运算量e1,e2,e3可以是变量或表达式。其运算规则是:若e1的值为真,则整个表达式的结果值取e2,否则e1的值为假,整个表达式结果值取e3。 - 逗号结合运算
用逗号“,”把若干独立的运算表达式结合成一个运算表达式,称为逗号结合表达式,简称逗号表达式。一般形式:表达式1, 表达式2, …, 表达式n
逗号表达式的求解过程是:先求解表达式1,再求解表达式2……最后求解表达式n,整个逗号表达式的值即为表达式n的值。 - 长度运算:C语言提供了取数据类型或变量存储长度的运算,运算符为sizeof,格式:sizeof(数据类型说明符或变量名)。长度单位为字节。
混合运算与类型转换
自动类型转换
在表达式中不同类型的数据进行运算时会被自动转换为同一类型,转换规则是由“存储长度短”向“存储长度长”的类型转换:char–>short–>unsigned short–>int–>unsigned int–>long–>float–>double
在进行赋值运算时,若赋值号右边表达式类型与赋值号左边变量的类型不同时,C编译程序也要自动进行数据类型转换。转换的规则:将表达式的类型转换为变量类型。
强制类型转换
使用强制类型转换,可以强迫变量或表达式的值转换为某一特定类型。一般形式:(类型) 变量 或 (类型) (表达式)
运算优先级和结合性
分级的一般规则是:
- 单目运算符优先级较高,双目运算符次之,三目运算符优先级较低
- 双目运算符中,算术运算符较高,关系运算符次之,逻辑运算符较低。位运算符中,移位运算符高于关系运算符,位逻辑运算符低于关系运算符
- 圆括号运算符优先级最高,逗号运算符优先级最低。赋值运算符及复合赋值运算符的优先级仅高于逗号运算符