放假只能打游戏?我们还可以学习操作符的性质

Posted build小春宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了放假只能打游戏?我们还可以学习操作符的性质相关的知识,希望对你有一定的参考价值。

目录

表达式求值

隐式类型转换

整形提升的意义

整形提升的具体实例

算术转换

操作符属性表

优先级结合性表

问题表达式


 

表达式求值

之前浅谈了一下表达式求值,主要是针对赋值表达式和判断表达式,今天来讲一下算术表达式的一些特别的性质,算术表达式的求值一般要很久运算符的优先级和结合性,但是有时候也需要一些特殊的性质

隐式类型转换

c的整形运算总是至少以缺省整形类型的精度来进行的。为了达到这种精度,表达式中的字符和短整型往往会在使用之前被转换成普通整形。这种转换被称为整形提升

整形提升的意义

表达式的运算是在cpu的相应计算器中进行的,CPU内运算器操作数的字节长度一般都是一个整形的大小,对于char和short这种小于四个字节的操作数,cpu难以实现,往往需要先进行转换,在送进cpu进行运算

整形提升的具体实例

实例1

#include<stdio.h>
int main()

	char a = 0xb6;
	short b = 0xb600;
	int c = 0xb6000000;
	if (a == 0xb6)
		printf("a");
	if (b == 0xb600)
		printf("b");
	if (c == 0xb6000000)
		printf("c");
	return 0;

//这个程序的结果是什么呢

 最后c不需要进行整形提升,条件为真打印c,所以程序运行的结果为c

实例2

#include<stdio.h>
int main() 
	char a =1;
	printf("%u\\n", a);
	printf("%u\\n", +a );
	printf("%u\\n", -a);

 看到这里希望大家可以理解整形提升

算术转换

当两个操作数类型不同时,至少需要其中一种类型转换成另一种类型,有时可能两种都要转换成int型,否则操作无法进行,下面是根据转换的优先性建立的表

long double1
double2
float3
unsigned long int

4

long int5
unsigned int 6
int 7

排名低的会转化成排名高的操作数类型,然后再进行运算

操作符属性表

优先级结合性表

运算符结合性
()  []  ->  .左结合
! ~ ++  -- +(正号) -(负号) *  & (类型)sizeof右结合
* / %左结合
+ -左结合
<<       >>左结合
<    <=    >   >=左结合
==  !=左结合
&左结合
^左结合
|左结合
&&左结合
||左结合
? : ;右结合
= += -= *= /= %= &= ^= |= <<=  >>=右结合
,左结合

从下往上优先级越来越高

问题表达式

表达式都是有准确的值的,但是有一些表达式根据优先级和结合性,并没有唯一的计算路径,答案也不唯一,这个时候不同的编译器会有不同的结果,这种表达式被称为问题表达式,接下来给两个经典的问题表达式

经典问题表达式1:
int i=2;
int a=(i++)+(++i)+(++i);
printf("%d",a);
在vs编译器下结果为12,在gcc环境下为10
经典问题表达式2
int i=1;
printf("%d %d",++i,i++);
首先我们得知道,printf函数传参是从右往左进行的,一定是先传右边再传左边
vs编译器的结果为 3 1
vc6++编译器的结果为 2 1

当我们遇到这种表达式的时候,不需要去疑惑答案的正确性,因为这本身就是个问题

今天的博客分享就到这了,下一期指针,更精彩哦!

 

以上是关于放假只能打游戏?我们还可以学习操作符的性质的主要内容,如果未能解决你的问题,请参考以下文章

Android知识体系梳理笔记三:动态代理模式---插件加载机制学习笔记

关于博主

L2-040 哲哲打游戏 (25 分)2021天梯赛c++

用Python玩任何一款街机,带你一起回味童年!

每周总结1

放假第七周