C语言不常用运算符
不经常用是相对而言。
仅作简单介绍,具体请自行测试。
算数运算符
正负运算符
形式:+或- 表达式
如: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);