前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >360面试题之操作符

360面试题之操作符

作者头像
黎鹤舞
发布2024-03-19 15:08:03
720
发布2024-03-19 15:08:03
举报

C语言操作符经典面试题

开门见山,直接展示代码 (以下编译环境是在windows平台visual studio2019)

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;

	i = a++ && ++b && d++;

	printf("i = %d\na = %d\nb = %d\nc = %d\nd = %d\n",i,a,b,c,d);
	return 0;
}

问题:计算i,a,b,c,d 五个值的大小。

知识点分析

首先,题目并不长,考察的是细节知识点的理解和掌握。这题主要考察的有两个知识点

1.自增运算符a++和++a的区别

首先a++的含义就是先执行语句,再进行自增操作。 而 ++a的含义是先进行自增操作,然后再执行语句。

2.逻辑运算符 && 和 ||

逻辑与运算符 a && b :符号两边都为真才为真; 逻辑或运算符 a || b :符号两边都为假才为假。

3.逻辑短路现象

逻辑运算按照从左—>右的方向执行,若前面的语句能够直接判断改逻辑的值,则直接结束运算。 举例说明: a&&b ,a为假(0) 则必为假,不执行b a || b ,a为真(非0)则必为真,不执行b

上述例子中B都没有执行,则说明b被逻辑短路了。

解题思路

1.先判断运算优先级,其中赋值语句(==)的优先级是最小的,并且自增自减的运算符优先级大于逻辑运算符。

*附C语言中运算符优先级图标

2.计算过程 由于逻辑运算符是左->右执行,所以限制性a++,由于a++的特性先执行后自增,导致a++再逻辑语句中仍为 0 ,并且逻辑运算符是&&,a++为0直接判断出整个逻辑语句为假(0),所以i = 0; ++b和d++语句不执行。,执行完i的赋值语句后a++自增,所以a = 1。

结果如下图:

变式题:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;

	i = a++ || ++b && d++;

	printf("i = %d\na = %d\nb = %d\nc = %d\nd = %d\n",i,a,b,c,d);
	return 0;
}

同理可得: i = 1,a = 1, b= 3, c = 3, d = 4。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言操作符经典面试题
    • 知识点分析
      • 1.自增运算符a++和++a的区别
      • 2.逻辑运算符 && 和 ||
      • 3.逻辑短路现象
    • 解题思路
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档