-
1 运算符
-
1.1算数运算符
运算符 | 名称 |
+ | 加号运算符(双目)且正号运算符(单目) |
- | 减号运算符(双目)且符号运算符(单目) |
* | 乘号运算符(双目) |
/ | 除号运算符(双目) |
% | 求余运算符(双目) 例:5%2=1 |
++ | 自增运算符(单目) 例:2++ 得到3 |
-- | 自减运算符(单目) 例:2-- 得到1 |
-
1.2关系运算符
运算符 | 名称 |
== | 等号运算符(双目) 实例:A=1,B=1;A ==B; 返回一个真值。 |
!= | 不等于运算符(双目) |
> | 大于运算符(双目) |
< | 小于运算符(双目) |
>= | 大于等于运算符(双目) |
<= | 小于等于运算符(双目) |
-
1.3逻辑运算符
运算符 | 名称 |
&& | 逻辑与运算(双目) 都真才真 |
|| | 逻辑或运算(双目) 都假才假 |
! | 逻辑非运算(单目) 假为真,真为假。 |
-
1.4位运算符
运算符 | 描述 |
& (双目) | and 将其存在于两个操作数的二进制位复制到其结果。 |
| (双目) | or 将其存在于任意一个操作数的二进制位复制到其结果。 |
^ (双目) | 将其存在其中一个操作数但不同时存在两个操作数的二进制复制到其结果。 |
~ (单目) | 反转运算符,及把其二进制0变成1、1变成0。 |
<< (单目) | 二进制左移运算符。 |
>> (单目) | 二进制右移运算符。 |
实例:
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
-
1.5赋值运算符
运算符 | 描述 |
= | 赋值运算符 实例:A = 1; B = A +2; |
+= | 加且赋值运算符 实例:C +=A 相当于 C = C + A |
-= | 减且赋值运算符 |
*= | 乘且赋值运算符 |
/= | 除且赋值运算符 |
%= | 求模且赋值运算符 |
<<= | 左移且赋值运算符 |
>>= | 右移且赋值运算符 |
&= | 按位与或且赋值运算符 |
^= | 按位异或且赋值运算符 |
|= | 按位或且赋值运算符 |
-
1.6其他运算符
运算符 | 描述 |
sizeof() | 返回变量大小。 |
& | 返回变量地址。 |
* | 指向一个变量。 |
?: | 条件表达式。 |
-
1.7左值(lvalue)与右值(rvalue)
变量为右值时,编译器只是取变量的值,左值标志了一个特定的位置来存储结果。
注意:左值同时还要满足可以改变。
-
2 优先级
#注意:后缀运算符有个特性,循环时会在下条语句才生效。
-
3 类型转换
-
3.1默认转换
当两个数据类型不同进行算数运算时,会默认把存储空间小的数据类型转换成存储空间大的数据类型。
作用:为了更加精确数据类型。
实例:
#include <stdio.h>
int main()
{
printf("整型输出:%d\n', 1 + 2.0);
printf("浮点型输出:%f\n", 1 + 2.0);
}
/*
输出结果:
整型输出:0 //错? 原因输出结果为浮点型,却强制输出为整型错。
浮点型输出:3.0
*/
-
3.2强制类型转换
(A)B、把B的数据类型强制转换为A类型。
实例:
#include <stdio.h>
int main ()
{
printf("整型输出A:%d\n", 1 + (int)2.0): //强制转换
printf("浮点型输出:%f\n", 1 + 2.0);
printf("整型输出B:%d\n", 1 + (int)1.8); //输出损失精度
}
/*
输出结果:
整型输出A:3
浮点型输出:3.0
整型输出B:2
*/