发布时间:2023-02-07 08:00
在我们编程的过程中,经常会遇到不同类型的数据之间进行计算,那么如果我们想要预期结果和实际结果相同的话,我们自己首先得知道要怎么计算,这一篇,我来讲一讲表达式求值的那点事,欢迎大家先点赞后阅读啊
首先我们要先提出几个名词:
表达式求值的顺序一部分由操作符的结合性和优先级决定,但是,在有些表达式求值的过程中,数据需要转换成其他类型的数据
对于在内存中所占字节小于int的数据,例如char,short类型的数据,在进行加减时会进行隐性转换,转换成int类型的数据后再进行加减。
//例如以下代码
char a = 3;
//3是int型数据,存放在char中会发生截断
//00000000000000000000000000000011(补码)
//截断后 00000011
short b = 5;
//short同理
//00000000000000000000000000000101(补码)
//截断后 00000101
int c = a + b;
//a,b要进行加减,需要进行整型提升
//a-> 00000000000000000000000000000011
//b-> 00000000000000000000000000000101
//再进行计算
scanf("%d\n", c);
整型提升前面添加的是1还是0由符号位说了算,不了解二进制码的同学请移步(11条消息) C语言数据的类型以及在内存中的储存_Joker2373的博客-CSDN博客
对于在内存中所占字节大于int的数据,我们默认会进行数据的算术提升
因为两个数据类型不同是无法进行各种计算的,当然算术提升也是隐性的