当前位置: 首页 > news >正文

逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解

C 语言提供了以下三种逻辑运算符。

  1.  一元:!(逻辑非)。
  2.  二元:&&(逻辑与)、||(逻辑或)。


以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻辑或  ||  优先级最低。即算术、逻辑、赋值运算符的优先级顺序为:

逻辑非 ! >算术 > 逻辑与 &&、逻辑或 || > 赋值=

逻辑表达式的值为逻辑值,即布尔型(bool),该类型为 C99 新增的,一些编译器可能还不支持该类型。

逻辑值分为逻辑真值和逻辑假值。一般情况下,在判断时,仅有零值被判断为逻辑假值(false),一切非零值均可被判断为逻辑真值(true);在存储和表示时,通常,使用 1 表示逻辑真值,0表示逻辑假值。

逻辑与 && 运算符的运算规则:只有两个操作数均为逻辑真时,结果才为真。其余情况,结果均为假。

逻辑或 || 运算符的运算规则:只有两个操作数均为逻辑假时,结果才为假。其余情况,结果均为真。

例如,设有定义语句

  1. int a=3,b=5;

则有:

  • !a:由于 a 非零,为真,!a 为假,其值为 0。
  • a||b:由于 a 和 b 均非零,均为真,故逻辑或的结果为真,其值为 1。
  • a&&b:由于 a 和 b 均非零,均为真,故逻辑与的结果为真,其值为 1。
  • !a||b&&2:由于逻辑非 ! 优先级最高,首先与 a 结合,而 && 优先级高于 ||,相当于(!a)||(b&&2), 即 0||1 为真,其值为 1。


逻辑与 &&、逻辑或 || 均有“短路”特性:

  • 逻辑与&&“短路”:当逻辑与&&的左操作数为逻辑假时,就足以判断该逻辑运算的结果为假了,故右操作数就不再被执行。
  • 逻辑或||“短路”:当逻辑或||的左操作数为逻辑真时,就足以判断该逻辑运算的结果为真了,故右操作数就不再被执行。


例如:

  1. int a=1,b=2,c;
  2. c=a||++b;
  3. printf("a=%d,b=%d,c=%d\n",a,b,c);

由于 a 为非零值,即为真,而当逻辑或 || 的左操作数为真时,就足以判断该逻辑操作的结果为真。故发生“短路”,即右操作数 ++b 不被执行。输出结果为:a=1,b=2,c=1。

分析以下程序,输出其运行结果。

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. int a=0,b=2,c;
  5. c=!a||++b&&a--;
  6. printf("a=%d,b=%d,c=%d\n",a,b,c);
  7. return 0;
  8. }

代码分析:
混合表达式 c=!a||++b&&a-- 中含有的运算符有逻辑非 !、逻辑或 ||、逻辑与 &&、算术前缀 ++、算术后缀 --、赋值号 = 等6个运算符。逻辑运算符、算术运算符、赋值运算符的优先级的关系为:

逻辑非! > 算术 > 逻辑与&&、逻辑或 || > 赋值 =

由于该表达式中赋值运算符优先级最低,故最后赋值。

根据优先级的高低,表达式 !a||++b&&a-- 等价于 (!a)||((++b)&&(a--)),而逻辑或 || 的左操作数 !a 为真,此时足以判断该表达式的值为真。故发生“短路”,即 || 的整个右操作数 ((++b)&&(a--)) 不再被执行。

运行结果为:
a=0,b=2,c=1


http://www.taodudu.cc/news/show-6309791.html

相关文章:

  • c语言2逻辑与2是1吗,2.C语言逻辑运算符和表达式
  • 如何插入文献及交叉引用
  • word交叉引用、连续多文献引用等
  • 论文中的交叉引用
  • C++交叉引用问题
  • Excel交叉引用及其应用实例
  • C++类的交叉引用问题
  • word中的交叉引用
  • 【threeJS】纹理贴图
  • 基于VC++的3D地形绘制与纹理贴图
  • ReactHooks——使用lodash中的throttle
  • vue中如何使用节流(throttle)函数
  • throttle/debounce应用及原理
  • debounce、throttle、useDebounce、useThrottle
  • js实现 throttle 和 debounce
  • ‘underscore系列之throttle“‘
  • throttle在程序中的作用
  • debounce与throttle区别
  • 关于IO throttle
  • Python -- 限流 throttle
  • 函数的节流(throttle)
  • js 中 throttle 的实现
  • JavaScript 节流函数 throttle 详解
  • 节流(Throttle)与防抖(Debounce)区别与demo实现+ 图解
  • 网络分层,图,易懂--对应 应用层、数据传输层、网络层、数据链路层
  • 【图论基础】分层图
  • 数据分层(方法论)
  • 分层图[模板]
  • 食物链(分层图?)
  • 分层图总结(例题)