-
算术运算符:
假设变量 A 的值为 10,变量 B 的值为 20,则:
关于自增和自减
- 运算符在前,先计算,表达式的值为递增后的值
- 运算符在后,取原变量值使用,表达式的值为递增前的值
++注意:加分号(结束符)就是语句,不加就是表达式。++
Exammple:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 1, j = 10, value;
value = i++ + ++j;
/*
* i = 1 值不发生改变
* j = 10 + 1 = 11
* value = 1 + 11 = 12
*/
printf("i = %d\n",i);
printf("j = %d\n",j);
printf("value = %d\n",value);
exit(0);
}
输出:
i = 2
j = 11
value = 12
-
关系运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:
区别赋值运算符
=
与关系运算符==
,后者返回逻辑值1
or0
。
-
逻辑运算符
假设变量 A 的值为 1,变量 B 的值为 0,则:
注意:逻辑运算符(&&,||)的短路特性
- 1、对于逻辑与
&&
来说,当第一个条件已经为假时,则表达式结果一定为假(同真为真,一假则假 ),此时不再执行第二个条件。例如:a && b
当a条件为假的时候,则b条件被短路,不再执行b条件,直接返回假。- 2、对于逻辑或
||
来说,当第一个条件已经为真时,则表达式结果一定为真(一真则真,同假则假 ),此时不再执行第二个条件。例如:a || b
当a条件为真的时候,则b条件被短路,不再执行b条件,直接返回真。
-
位运算符(对嵌入式开发有重要意义)
针对嵌入式应用中:用于硬件的控制,直接针对某一位来处理,处理缓冲区等。
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
假设变量 A 的值为 60,二进制为0011 1100
,变量 B 的值为 13,二进制为0000 1101
,则:
- 二进制左移运算符
<<
,右补0,左边被挤下的二进制位丢弃- 二进制右移运算符
>>
,正数左补0,负数左补1,右边被挤下的二进制位丢弃int i = B1100 // B 表示二进制,十进制数值为12 //左移1位 i << 1 1100 --> 1000 -> --> 8 //右移1位 i >> 1 1100 --> 0110 -> 0110 --> 6
- 异或运算符
^
:相同为0,不同为1.
-
赋值运算符
Example:
int a = 10;
a -= a *= a += a /= 2
//计算时从右往左计算
// a /= 2 --> a = a / 2 = 10 / 2 = 5;
// a += 5 --> a = a + 5 = 5 + 2 = 7;
// a *= 7 --> a = a * 7 = 7 * 7 = 49;
// a -= 49 --> a = a - 49 = 49 - 49 = 0;
-
杂项运算符
三目运算符:如
a > b ? a : b
等同于if
语句中的if(a > b) return a; else return b;
- 运算符之间的优先级
运算符的优先级确定表达式中项的组合,下表将按运算符优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,较高优先级的运算符会优先被计算。
- 位运算的特殊意义
标签:10,--,value,运算符,num,表达式 From: https://www.cnblogs.com/jxsme/p/17514680.html
- 将操作数中第n位(从0开始,num从右 --> 左数)置1,其他位置不变:
做按位或运算:num = num | 1 << n ,将原来二进制数与1向左移n个位做按位或运算。
- 将操作数中第n位(从0开始,num从右 --> 左数)清0,其他位置不变:
num = num & ~(1 << n)
- 测试第n位:
if(num & 1 << n)
- 如何从指定宽度的书中取出其中的某几位???