C奇技淫巧 蝌蚪运算符

介绍

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/

你可能感兴趣的:(C奇技淫巧 蝌蚪运算符)