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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • C++运算符重载-下篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 1,527评论 0 49
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,546评论 0 13
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,385评论 0 51
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 777评论 0 0
  • 今天主日后看到重大新闻,德州一教会枪击,目前为止,至少26人死亡。 不信的人评论充满了疑问甚至嘲讽:“他们的上帝没...
    父亲的喜乐阅读 1,027评论 0 1

友情链接更多精彩内容