C语言&,&&,|,||
---------------------------------------------------------------------------&
在C语言中,&有三种作用,分别如下:
1. 取地址。单目运算符。用来取一个变量的地址。
比如
int i, *p;p = &i; 这里的&作用是取变量i的地址。
scanf("%d,%d",&a,&b)把接收的字符或数据存放在a和b中。
2. 位操作中的与操作运算符。
也就是常说的and操作,双目运算符。
计算的时候按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0
比如
2.1
0x12&0x23 转为二进制为:
&按位与运算:
B00010010&B00100011,
B00010010
B00100011
B00000010
即结果为0x02。
2.2
按位与运算:00000011(2)&00000101(2)
00000011 3
00000101 5
00000001(2) 1
#include
main()
{
int a=3;
int b = 5;
printf("%d",a&b);
}
2.3
按位与的用途:(清零位取0)
1)清零若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:
原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。例:原数为43,即00101011(2),另找一个数,设它为148,即10010100(2),将两者按位与运算:
00101011(2)&10010100(2)
00101011 43
10010100 148
00000000(2)
#include
main()
{
int a=43;
int b = 148;
printf("%d",a&b);
}
2)保留指定位:(保留位取1)
与一个数进行“按位与”运算,此数在该位取1.例如:有一数84,即01010100(2),想把其中从左边算起的第3,4,5,7,8位保留下来,运算如下:01010100(2)&00111011(2)
01010100 84
00111011 59
345 78
00010000(2)
#include
main()
{
int a=84;
int b = 59;
printf("%d",a&b);
}
3. 当两个&&一起用的时候,表示为逻辑运算中的与运算。
逻辑运算结果只有0和1两种结果。
一般在&&两边是两个逻辑表达式。
当两个表达式值均为1时,&&运算结果为1,否则为0。
比如
2>1 && 0<1 这个的值为1&&1 = 1。
1>2 && 2>0 这个值为0&&1 = 0。
1>2 && 2>3 这个值为0&&0=0。
---------------------------------------------------------------------------&&
#include
main()
{
int a;
int b=30;
a=b>10&&b<60;//获取&&的值
printf("%d",a);
}
1
#include
main()
{
int a;
int b=80;
a=b>10&&b<60;//获取&&的值
printf("%d",a);
}
0
---------------------------------------------------------------------------|
|按位或运算:
即0|0=0
1|1=0
0|1=1
1|0=1
00110000|00001111
00110000
00001111
00111111
---------------------------------------------------------------------------||
#include
main()
{
int a;
int b=30;
a=b>10||b<60;//获取||的值
printf("%d",a);
}
1
#include
main()
{
int a;
int b=80;
a=b>10||b<60;//获取||的值
printf("%d",a);
}
1
#include
main()
{
int a;
int b=80;
a=b<10||b<60;//获取||的值
printf("%d",a);
}
0