介绍
C语言还有另一个更加鲜为人知的运算符,叫做蝌蚪运算符(tadpole operator),用于实现单目的加一、减一运算。
语法 | 含义 | 助记 |
---|---|---|
-~y | y + 1 | 蝌蚪游向一个值让它变大 |
~-y | y - 1 | 蝌蚪离开一个值让它变小 |
有了这两个运算符,我们可以改写如下的代码
x = (y + 1) % 10;
x = (y + 1) * (z - 1);
x = (double)(f(y) + 1);
变为
x = -~y % 10;
x = -~y * ~-z;
x = (double)-~f(y);
减少了括号的使用,使代码更简单。
原理
实际上是一个负号与一个按位取反的组合。
注意按位取反实际上就是对数加一个负号然后加一:取负数加一;此时再结合运算符:负号,负负抵消,最终结果即相当于原变量加一,为最终结果。
注
- 不能像 ++/-- 一样作用与浮点数
- 可以重复使用 像
~-~-a == a-2
两个蝌蚪游走;
-该运算符优先级高于任何多目运算符,所以使用该蝌蚪运算符,能有效减少括号的使用
参考文献:
来自率先声明支持这一运算符的Visual C++编译器的文章:
https://blogs.msdn.microsoft.com/oldnewthing/20150525-00/?p=45044/