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

C/C++面试准备——运算符

关于运算符


C语言中得运算符按运算类型分为:赋值运算符、算术运算符、逻辑运算符、关系运算符、位运算符、指针运算符和取成员运算符;
按运算对象(操作数)的个数分为:单目运算符、双目运算符、三目运算符。



题(1):请写出下列代码的输出内容。


考察内容自增量、自减量。
增量操作有前增量和后增量:前增量先加1,再将加1后的值作为表达式的值;后增量先将原数值作为表达式的值,再将原数加1。 自减量亦是如此。


#include<stdio.h>
int main()
{
	int a,b,c,d;
	a=10;
	b=a++;
	c=++a;
	d=10*a++;
	printf("b,c,d:%d,%d,%d",b,c,d);
	return 0;
}
//b,c,d:10,12,120

题(2):运算符的优先级问题


运算符的两个重要特性:优先级和结合性(计算顺序)。

请添加图片描述

#include<stdio.h>
int main()
{
	if(0 & 1 ==0)
	{
		printf("0 & 1 ==0\n");//==和!=运算优先级高于&、~、|、&&、||
	}
	else{
		printf("0 & 1 !=0\n");
	}
	if(0 & 1 !=0)
	{
		printf("0 & 1 !=0\n");
	}
	else{
		printf("0 & 1 ==0\n");
	}
	//运算结果
	//0 & 1!=0;
	//0 & 1==0;

题(3):&&和&,||和| 有什么区别。


(1)&作为一元运算符,用来返回被操作数的地址;
作为二元运算符,为整型和bool型数据定义了二进制“与”运算:
当操作数为整型数据时,&是计算操作数的按位“与”;当操作数为bool型数据时,&是计算操作数的逻辑“与”运算,当且当两个操作数都为true时,其计算结果才为true。
(2)&&是二元运算符,对操作数进行条件“与”运算。将操作数视为真或假。在判断左侧操作数就能确定结果的情况下不再对右侧操作数求值。
(3)&和&&的区别:
一:&对操作数进行求值运算,&&只是判断逻辑关系。
二:&&在判断左侧操作数就能确定结果的情况下就不再对右侧操作数求值
|和||的区别亦是如此。


#include<stdio.h>
int main()
{
	int a=8;
	int b=9;
	int c=0;
	int d=0;
	c=(a & b);
	d=(a & b);
	printf("c:%d\nd:%d\n",c,d);
}
//c:8
//d:1

题(3):什么是左值,什么是右值?


对于每一个变量,都有两个相关值:地址值和数据值。
地址值:存储在内存地址中的数据,也称为变量的右值。
数据值:存储数据值的那块内存的地址,也称为变量的左值。
左值可以做右值,右值不能做左值!!!



题(4):写出下面程序的运行结果。


(1)字符型数据在计算机内存中只占一个字节的空间。
(2)int/float在32/64位机上都是4个字节。(短整型是2个)
(3)double/long long在32/64上都是8个字节。
(4)unsigned long/long在32/64上都是8个字节。
(5)指针保存的是一个地址,其长度和整型数据一致。也就是说无论指针存储的地址指向哪一种数据类型的地址,其长度都是一个整型数据的长度。


#include<stdio.h>
#include<windows.h>
int main()
{
	char x='a';
	char *p="abcd";
	char y[4]={'a','b','c','d'};
	int a=10;
	int *b=&a;
	int c[4]={1,2,3,4};
	printf("%d,%d,%d\n",sizeof(x),sizeof(p),sizeof(y));
	printf("%d,%d,%d\n",sizeof(a),sizeof(b),sizeof(c));
}
//32
/*  
1,4,4
4,4,16
*/
//64
/*
1,4,4
4,4,16
*/

题(5):sizeof和strlen的区别。


两者都是用来返回参数的长度。只不过sizeof用来返回一个数据类型的长度,strlen用来返回一个字符串的长度。
两者的本质区别:
(1)sizeof是一个操作符,strlen是一个函数。
(2)sizeof的参数可以是数据的类型,也可以是变量(此时可以不加括号);strlen只能以char *并且结尾为‘\0’的字符串作为参数。


#include<stdio.h>
#include<string.h>
int main()
{
	int a=3;
	printf("%d,%d",sizeof(int),sizeof(a));
	char *p="hello 123!";
	printf("%d",strlen(p));
}
//4,4
//10

(3)在大部分的编译器中,在编译时就计算出了sizeof的结果。strlen必须在运行时才能计算出来。sizeof计算所占内存大小,strlen计算字符串实际的长度。

#include<stdio.h>
#include<string.h> 
int main()
{
	char str[10]="abcd";//str数组在编译期就已经确定大小 
	int x=strlen(str);//在运行期确定 
	int y=sizeof(str);//在编译期期确定
	printf("%d,%d",x,y);
}
//4,10

(4)数组做sizeof的参数不退化,传递给strlen就会退化为指针。
数组作为参数传给函数时,传递的是指向数组首地址的指针,不是数组数据结构。


相关文章:

  • 【华为机考】ACM输入输出(中等+)
  • 美团四年,字节三年这七年测试之路希望能让正在迷茫的你少走弯路
  • Vue 基础
  • Ts/Typescript基础运用
  • 嵌入注意力机制的多尺度深度可分离表情识别--2021.宋玉琴
  • 页面登录功能的思路
  • ShardingSphere 5.2.0:分片审计功能拦截多分片场景下的不合理请求
  • 毕业设计 单片机stm32智能大棚监控护理系统 - lora 远程通信
  • 关于QCefView的一些事
  • b站pink老师JavaScript的jQuery 案例代码——电梯导航案例
  • Python快速实现简易飞机大战小游戏
  • PowerWorld仿真与电力系统潮流计算(牛顿拉夫逊法和高斯赛德尔法)(Matlab实现)
  • VSCode自动更新后关闭,重新打开后版本自动降级
  • Google Earth Engine(GEE)——如何处理阈值筛选后的结果没发生变化,以青藏高原NDBI为例
  • 数字验证学习笔记——SystemVerilog芯片验证4 ——数据类型
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Fabric架构演变之路
  • flutter的key在widget list的作用以及必要性
  • log4j2输出到kafka
  • Nodejs和JavaWeb协助开发
  • React-生命周期杂记
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 当SetTimeout遇到了字符串
  • 多线程事务回滚
  • 回顾 Swift 多平台移植进度 #2
  • 机器学习学习笔记一
  • 基于游标的分页接口实现
  • 面试总结JavaScript篇
  • 网络应用优化——时延与带宽
  • 回归生活:清理微信公众号
  • # Java NIO(一)FileChannel
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (ZT)一个美国文科博士的YardLife
  • (差分)胡桃爱原石
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)C#调用WebService 基础
  • (转)c++ std::pair 与 std::make
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .axf 转化 .bin文件 的方法
  • .NET Framework .NET Core与 .NET 的区别
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .NET中winform传递参数至Url并获得返回值或文件
  • @SuppressWarnings注解
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [<死锁专题>]
  • [AR]Vumark(下一代条形码)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh