C语言中的&与&&的区别

一、&:按位与

按位与(&)是用来计算的,像+ - * / 一样的计算符号,&在计算时,将两个变量的二进制数从最低位到最高位每一位相与一遍算出一个新的二进制数(如下图)。 &运算:0&0=0,0&1=0,1&1=1,即 0与上任何数都为0,只有1与1才为1。

(1)同位数变量&运算:

图1 8位变量与8位变量&运算

(2)不同位数变量&运算:

如果两个变量的位数不一样,位数少的变量在运算前先在高位补0直到与位数高的变量的位数一样,然后计算时还是低位对齐进行&运算:


二、&&:逻辑与

首先理解清楚“逻辑”两个字,在逻辑与(&&)的眼里只有真和假,或者说只有0和非零。0为假,非零为真,一个0&&任何数都为0,非零&&非零 = 1。所以,逻辑与出来之后只有 0和1。&&一般用于if()语句的判断。

下图只是为了方便理解做的演示,正常使用中&&不用来运算。从下图可以看出,经过&&之后,只有0或1。

三、技巧

大家在使用这两玩意儿的时候一定要分清楚,哪个用来计算,哪个用来判断。搞错会出大事的,比如下图都是a与b,结果却是一个为0,一个为1。如果你看得懂了,说明你掌握了这两个符号的用法,如果还不懂是为什么那就还需要继续努力。

接下来再讲讲这两个符号在使用中容易出现的坑:

只把 & 换成了 && ,但是最后输出的值却不一样,为什么呢。

图1:变量b初始值为2,输出为3,说明这个程序运行到了&右边的(b++)。

图2:变量b初始值为2,输出为3,说明没有运行到了&&右边的(b++)。 结果:逻辑与(&&)运算时,因为0&&上任何数都得0,所以当&&左边的数为0时,直接跳过了判断 右边值的步骤,因为没必要了,无论你是什么数最后的值都是0, 所以在图2中,当a的值为0 ,这个程序没有去判断&&右边的值,也就没有运行b++,所以b的值还是为2。

这篇文章就讲到这,如果有讲的不对的地方,请多多指点。

经验分享 程序员 微信小程序 职场和发展