逻辑非运算“!”,双重非运算

刚毕业的小新在阅读同事的代码时,看到一个 ( !! Vmode<<6 )  的运算,刚开始看到的时候很疑惑,这双重取非不是又回到原来的值了吗?研究了好一会才搞清楚是怎么回事。

第一步我们需要了解:                                                                                                                 

“!” 运算符含义表示“逻辑非运算”,即为0、1运算,使用形式为“!表达式”,且自右向左运算;
“!” 运算符优先级高于左移运算符“<<” ;
表达式是指由常量、变量、函数,通过运算符连接起来而形成的一个算式,一个常量,一个变量或一个函数都可以看成是一个表达式。
                                                                                           

假设我们定义

1  int Vmode = 3;
2  int a[3] = {0};
3  a[0] = Vmode<<6;
4  a[1] = !Vmode<<6;
5  a[2] = !!Vmode<<6;

a[0] = Vmode<<6很容易计算得出等于192;                                                                               

因为  Vmode = 3 > 0
所以  逻辑非运算“!Vmode” 就相当于     “!1”

那么得到一下结果:
a[1] = !Vmode<<6 = (!1)<<6 = 0<<6 = 0;
a[2] = !!Vmode<<6 = (!(!1))<<6 = (!(0))<<6 = 1<<6 = 64;

本次分享其实是很简单的运算问题,但是像我这样的小新很容易对运算符的含义理解不清或者是容易模糊理解,就比如“!”运算符的含义指的是“逻辑非”运算,一开始我就很自然地按位取反来操作,结果怎么都算不出来,但实际上的结果应该是非0即1 ,这就是逻辑运算的含义。

希望本次分享可以帮助到像我这样对运算符的使用理解不清楚的小伙伴,也希望大家可以借此分享举一反三,同时本文有表达错误的地方,欢迎给予指正!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值