It has been 675 days since the last update, the content of the article may be outdated.

不经常用是相对而言。
仅作简单介绍,具体请自行测试。

算数运算符

正负运算符

形式:+或- 表达式
如:int a=1,那么-a为-1。
也许你会为了保险起见使用-1*a,但实际上无需这样。

位运算符

按位取反

形式:~ 表达式
其实可以把这个看成反码运算符
如: ~3等于-4。

计算原理

  • 原码 :最高位是符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。
  • 反码:正数的反码与原码一致,负数的反码是对原码按位取反,只是最高位(符号位)不变。
  • 补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。
  • 整数在计算机中都是以补码形式进行存储和运算的,显示的时候以原码显示。
  • ~符号是按位取反,0变1,1变0。

3的原码为0000 0011,补码为0000 0011
取反后的补码为1111 1100,该补码的反码为1111 1011,源码为1000 0100
最后输出十进制-4。

按位与

形式:表达式 & 表达式
就是两者的每一位进行与逻辑运算
如:-3 & -2等于-4
计算原理与按位取反大同小异。都是其补码进行运算后再转为源码。

原理

-3的补码为1000 0011,-2的补码为1000 0010
按位与后为1111 1100,转为原码为1000 0100,输出十进制为-4。

按位或

形式:表达式 | 表达式
计算过程与按位与一样。
如:-5 | -2等于-1。

按位异或

形式:表达式 ^ 表达式
计算过程与按位与一样。
如:-5 ^ -2等于3。

其他

左移

形式:变量 << 表达式
以二进制的形式整体左移且在尾巴加上对应个数的0。
如:int a=17; a<<1的结果为34。

计算过程

17的二进制为10001,左移一位后为100010,即输出34。

注意,左移右移计算符号位不变。

右移

形式:变量 >> 表达式
以二进制的形式整体右移对应位数。
如:int a=17; a>>2的结果为4。

二进制100为十进制4

条件运算符

形式:表达式1 ? 表达式2: 表达式3
表达式1返回0时返回表达式3的值,其他返回表达式2的值。
由条件运算符构成的表达式也可以叫三元表达式。
如:int a=17, b=-2; printf(“%d”, (a > b)? a: b); 输出17。

逗号运算符

形式:表达式, 表达式, …
如:int a=17, b=-2; scanf(“%d”, &a), printf(“%d”, -2?a:b);