3.C语言运算符与显式类型转换
C语言运算符与显式类型转换
一、显式类型转换(强制类型转换)
当程序员认为有必要将一种数据类型转换为另一种类型时,可使用 显式类型转换(强制转换)。
语法格式
(需要转换的类型) 常量
(需要转换的类型) 变量
(需要转换的类型) 表达式
注意事项
-
可能导致精度丢失;
-
被转换的对象本身不发生变化,只是表达式结果被临时转换;
-
举例:
int a = 3.14; // a = 3,小数部分被舍弃 float b = 5; // b = 5.0,小数部分自动补0
二、算术运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
+ | 加法 | 1 + 2、a + b、a + 1 |
- | 减法 | 1 - 2、a - b、a - 1 |
* | 乘法 | 1 * 2、a * b |
/ | 除法 | 1 / 2、a / b、a / 2 |
% | 取余 | 10 % 3、a % 3 |
++ | 自增 1 | a++ 或 ++a |
-- | 自减 1 | a-- 或 --a |
注意事项
-
除数不能为 0,否则会出现:
Floating point exception (core dumped) -
%(取余)只能用于整数类型(int,short,char,long),不能用于浮点型。 -
++与--:int a = 10; a++; // 先用后加 ++a; // 先加再用
三、赋值运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
= | 赋值 | a = b + 1; |
+= | 加后赋值 | a += 5; |
-= | 减后赋值 | a -= 5; |
*= | 乘后赋值 | a *= 2; |
/= | 除后赋值 | a /= 2; |
%= | 取余后赋值 | a %= 3; |
本质
=的本质是将右值的内容复制到左值的内存单元中。
- 左值(Lvalue):可以被赋值的对象(变量)
- 右值(Rvalue):可以出现在右侧的值(常量、变量、表达式)
合法示例
a = b + 1;
非法示例
a + 1 = 20; // 左侧不是变量
四、类型匹配与兼容性规则
-
浮点数 → 整型:只保留整数部分,小数部分舍弃。
-
整型 → 浮点数:小数部分补0。
-
相同内存空间类型复制:
- 若右值为
unsigned short,左值为short,可能导致符号变化。
- 若右值为
-
小空间 → 大空间:
- 正数扩展位补
0; - 负数扩展位补 1(符号位)。
- 正数扩展位补
-
大空间 → 小空间:
- 多出的高位被截断(例如
short → char)。
- 多出的高位被截断(例如
五、逗号运算符
由 逗号运算符
,连接的多个表达式称为 逗号表达式。
- 执行顺序:从左到右依次计算
- 表达式值:整个逗号表达式的结果为最后一个表达式的值
示例:
int a, b, c, num;
num = (a + b, b + c, a - c, b - c);
printf("%d\n", num); // 输出 b - c 的结果
六、sizeof() 运算符
用于获取变量、类型或表达式在内存中占用的字节数。
使用格式
sizeof(变量);
sizeof(类型);
sizeof(表达式);
示例:
int a;
printf("%lu\n", sizeof(a)); // 输出4
printf("%lu\n", sizeof(int)); // 输出4
printf("%lu\n", sizeof(3.14)); // 输出8
七、C语言运算符的结合律
C语言中的多数运算符具有 从左到右 的结合方向,
但赋值运算符(如=、+=、-=等)为 从右到左。
八、示例代码:赋值与类型转换
#include <stdio.h>
int main(void)
{
short a = 0;
a = 10;
unsigned short b = 49152;
a = b; // 类型不同但兼容
printf("a = %d\n", a);
return 0;
}


646

被折叠的 条评论
为什么被折叠?



