C语言中&与&&的区别是什么?解析示例结果差异
C语言中
&与&&的核心区别 嘿,这个问题我刚学C的时候也踩过坑!这两个符号看起来像,但完全是两种不同的运算符,咱们结合你的例子一步步说清楚:
1. &:按位与运算符(Bitwise AND)
这是个位操作符,专门对整数的二进制位下手。它的规则是:把两个数的二进制每一位对应起来,只有当两个对应位都是1的时候,结果的这一位才是1,否则就是0。
看你的例子:int a = 8; int b = 4;
- 8的二进制是
1000 - 4的二进制是
0100
咱们逐位做与运算:
1000 & 0100 ------ 0000
结果就是二进制的0000,转换成十进制就是0,所以你看到输出a & b = 0。
2. &&:逻辑与运算符(Logical AND)
这是个逻辑操作符,用来判断两个条件的逻辑真假关系。在C语言里有个约定:所有非0的数值都被当作“真”,只有0才是“假”。它的规则是:只有当两个操作数都为“真”时,整个表达式的结果才是“真”(用1表示);只要有一个是“假”,结果就是“假”(用0表示)。
再看你的例子:a=8(非0,属于真),b=4(也是非0,真),那么a && b就是“真 && 真”,结果自然是真,也就是1,所以输出a && b = 1。
另外补充个小知识点:&&还有短路求值的特性——如果第一个操作数已经是假了,就不会再计算第二个操作数了;但&没有这个特性,它会把两个操作数都计算完再做位运算。
内容的提问来源于stack exchange,提问作者sadsa dadasd
相关产品推荐
相关产品推荐

