C语言中的逻辑运算符和位运算符总结

本文详细解析了逻辑运算符(逻辑与、逻辑或、逻辑非)和位运算符(位与、位或、位异或、位取反)的用法及优先级,通过实例演示如何在编程中正确应用这些运算符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

老分不清一个&号和俩的用法,今天专门拿出来整理整理:

一、逻辑运算符:

   包括:1。&&逻辑与 2。||逻辑或 3。!逻辑非
   逻辑运算符用于对包含关系运算符的表达式进行合并或取非
   对于使用逻辑运算符的表达式,返回0表示“假”,返回1表示“真”。关于逻辑运算符的解释
   请注意:任何使用两个字符做符号的运算符,两字符之间不应有空格,即将==写成= =是错误的。
   假设一个程序在同时满足条件a<10和b==7时,必须执行某些操作。应使用关系运算符和逻辑运算符“与”来写这个
   条件的代码。用&&表示“与”运算符,该条件代码如下:
   (a<10) && (b==7);
   类似地,“或”是用于检查两个条件中是否有一个为真的运算符。它由两个连续的管道符号(||)表示。如果上例
   改为:如果任一语句为真,则程序需执行某些操作,则条件代码如下:
   (a<10) || (b==7);
   第三个逻辑运算符“非”用一个感叹号(!)表示。这个运算符对表达式的真值取反。例如,如果变量s小于10,程序
   程序需执行某些操作,则条件代码如下:
   (s<10)
   或
   (!(s>=10)) //s不大于等于10
   关系运算符和逻辑运算符的优先级一般都低于算术运算符。例如,5>4+3的计算与5>(4+3)运算符是一样的,即
   先计算4+3,再执行关系运算。此表达示的结果为“假”,即,将返回0。
   下面的语句
   printf("%d",5>4+3);
   将输出 0


   可以总结为:&&的结果是真真为真。||的结果是假假为假。


   二、位运算符:

    包括:1。&位与符 2。|位或符 3。^位异或符 4。~位取反符
   以操作数12为例。位运算符将数字12视为1100。位运算符将操作数视为位而不是数值。数值
   可以是任意进制的:十进制、八进制或十六进制。位运算符则将操作数转化为二进制,并相应地返回1或0。
   位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字。例如:
   表达式10&15表示(1010 & 1111),它将返回表示1010的值10。因为真真得真,或者是11得1,同位全是1结果也是1
   表达式10|15表示(1010 | 1111),它将返回表示1111的值15。假假得假。全零得零。
   表达式10^15表示(1010 ^ 1111), 它将返回表示0101的值5。此时是同性相斥,相同的就为假。
   表达式~10表示(~1010),它将返回表示0101的值 -11。此号好理解,按位取反

在C语言中,逻辑运算符的运算顺序是非常重要的,因为它决定了表达式是如何被求值的。以下是C语言逻辑运算符的运算顺序: 1. **逻辑运算符(!)**:这是单目运算符,优先级最高。它用于取反操作,即如果操作数为真(非零),则结果为假(0);如果操作数为假(0),则结果为真(1)。 2. **逻辑运算符(&&)**:这是双目运算符,优先级低于逻辑运算符。它用于两个操作数都为真时,结果才为真。 3. **逻辑运算符(||)**:这也是双目运算符,优先级低于逻辑运算符。它用于两个操作数中只要有一个为真时,结果就为真。 需要注意的是,逻辑运算符具有短路特性: - 对于逻辑运算符(&&),如果第一个操作数为假,则不会计算第二个操作数。 - 对于逻辑运算符(||),如果第一个操作数为真,则不会计算第二个操作数。 以下是一些示例代码,展示了逻辑运算符的运算顺序: ```c #include <stdio.h> int main() { int a = 1, b = 0, c = 2; // 示例1:逻辑运算符 if (a && b) { printf("a && b is true\n"); } else { printf("a && b is false\n"); } // 示例2:逻辑运算符 if (a || b) { printf("a || b is true\n"); } else { printf("a || b is false\n"); } // 示例3:逻辑运算符 if (!b) { printf("!b is true\n"); } else { printf("!b is false\n"); } // 示例4:短路特性 if (a && (c = 5)) { printf("a && (c = 5) is true, c = %d\n", c); } if (b && (c = 5)) { printf("b && (c = 5) is true, c = %d\n", c); } else { printf("b && (c = 5) is false, c = %d\n", c); } return 0; } ``` 运行结果: ``` a && b is false a || b is true !b is true a && (c = 5) is true, c = 5 b && (c = 5) is false, c = 2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值