注意:
算数运算符,运算结果是数值类型
关系运算符,运算结果是
boolean
类型(其实就是
int
的
0-
假,非
0-
真)
逻辑运算符,运算结果是
boolean
类型(其实就是
int
的
0-
假,非
0-
真)
运算符
位运算符
说明:按位(
bit
) 来进行运算操作的运算符。
语法:
~ & | ^ << >>
~:按位取反
说明:单目运算符,数据的每一个
bit
位取反,也就是二进制数位上的
1
变
0,0
变
1
。
举例:
unsigned char ret = ~0x05;// 0000 0101 --> 1111 1010
printf("%d\n",~5); // -6
&:按位与
语法:
a & b
说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

- 1&1:1
- 1&0:0
- 0&0:0
- 0&1:0
总结:如果我们前后两个操作数对齐位置上的二进制数字都是
1
,其结果是
1
,否则结果都是
0
|:按位或
语法:
a | b
说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

- 1|1:1
- 1|0:1
- 0|0:0
- 0|1:1
总结:如果我们前后两个操作数对齐位置上的二进制数字只要有
1
,其结果是
1
,否则结果都是
0
^:按位异或
语法:
a ^ b
说明:首先将参与计算的操作数转换为二级制,然后按照每一位进行对齐,处理结果如下:

- 1^1:0
- 1^0:1
- 0^0:0
- 0^1:1
总结:不同为1,相同为0
<<:左移,按bit位往左偏移
1.
无符号左移:
语法:
操作数
<<
移动位数(
bit
位)
unsigned int a = 3 << 3; // 快速计算:3 * 2^3
printf("%d\n",a); // 24
2.
有符号左移:
语法:
操作数
<<
移动位数(
bit
位)
int a = -3 << 3; // 快速计算:-3 * 2^3
printf("%d\n",a);// -24
>>:右移,按bit位往右偏移
1.
无符号右移:
语法:
操作数
>>
移动位数(
bit
位)
unsigned char a = 3 >> 3;
printf("%d\n",a); // 0
2.
有符号右移:
语法:
操作数
>>
移动位数(
bit
位)
int a = -3 >> 3;
printf("%d\n",a);// -1
案例:














