1 &
&在c语言中表示按位与,格式如下:
int result = a&b;
所以a&b返回值为整数类型
那什么是按位与呢?
按位与即将 & 两侧的数字转换为2进制后逐位进行"与"比较(如果a,b所对应的二进制位数不同,则在位数低者的最高位前补0直至位数相同——比如1100与10,那就要将10变为0010,此时值不发生变化),
与的所有比较结果如下(左右可互换):
&左侧 | &右侧 | 最终结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
逐位比较过后,将得出的结果按对应位置摆放,并将摆放后的结果转换为10进制输出。
举例:
#include <stdio.h>
int main()
{
int result=12&5;
printf("%d",result);
}
12对应的二进制为1100(a):5对应的二进制为0101(b)
我们先列个表格逐位分析:
a | b | 结果 |
---|---|---|
1 | 0 | 0 |
1 | 1 | 1 |
0 | 0 | 0 |
0 | 1 | 0 |
(从上到下就是从最高位到最低位)
那么最终结果就是0100,再将其转为十进制(0100对应十进制为4)赋值给result
所以最终打印的结果为
4
2 &&
&&是一个逻辑运算符,只有两侧的逻辑表达式同时为真,整个逻辑表达式才为真
&左侧 | &右侧 | 最终结果 |
---|---|---|
假 | 假 | 假 |
假 | 真 | 假 |
真 | 假 | 假 |
真 | 真 | 真 |
(真,假也可以换做1,0)
补充:对于数字来说,0为假,其余为真
举例:
#include <stdio.h>
int main()
{
int a=12,b=5,c=0;
if(a==0&&b==0)
printf("row1");
if(a==0&&b==5)
printf("row2");
if(a==12&&b==0)
printf("row3");
if(a==12&&b==5)
printf("row4");
}
代码中四个if中&&左右两侧的逻辑表达式值与之前提到的表格相对应,即:
&左侧 | &右侧 | 最终结果 |
---|---|---|
假 | 假 | 假 |
假 | 真 | 假 |
真 | 假 | 假 |
真 | 真 | 真 |
显然,最终输出结果为
row4