if的条件是这样判定的,如果为非零值认为为真,为0则为假。当用!a[i]时,说明a[i]为0时执行下面的语句。其中!为非,也就是说“反”,因为我们默认的是非零即为真,所以说原句省略了一部分他相当于if(!a[i]!=0),即(!a[i]是非零的)
if(!a[i])就是判断 !a[i] 的值是真还是假,在C语言中0为假,非0为真
如果a[i]的值为0,那么!a[i]为1,if(!a[i])成立
如果a[i]的值不为0,那么!a[i]为0,if(!a[i])不成立
“<<”
代表左移运算符.
a[i]<<=2
即:
将a[i]
对应的二进制向左移两位.
左移运算通过可以用来做2的多次方乘法,
左移1位等于乘以2的一次方
因此在不溢出的情况下:
a[i]<<=2;
其实等价于:
a[i]乘以2的2次方
即:
a[i]<<=2
等价于
a[i]=a[i]*2*2=a[i]*4
a[i]是一个bool类型的
就是说 a[i]非真成立的话