运算符与表达式
1、什么是运算符,什么是表达式?
表达式是由一系列运算符(operators)和操作数(operands)组成的
例如:
int a,b,c;
c = a + b;
c = a * b;
c = a / b;
c = a - b;
a == b;
a = b;
+ - * / == = 一系列符号就是运算符
上面的 a+b 、a/b等,就是表达式。
表达式就运算符和操作数(变量,立即数等)组成的一系列完整语句
表达式运算结果
若我们的操作数类型并不相同,比如 c = a + b,此处的a为char,b为short
#include <stdio.h>
void main()
{
char a = 1;
short b = 2;
int c = a + b;
return;
}
然后我们在return或者结尾花括号处 F9 下断,然后构建运行,去反汇编窗口查看。
看横线和圈出来的地方
char a = 1; --> mov byte ptr [ebp-4],1 //把1给ebp-4,一字节byte
short b = 2; --> mov word ptr [ebp-8],offset main+20h (0040d4b0) //把2给ebp-8,双字节word
//int c = a + b;
movsx eax,byte ptr [ebp-4]
movsx ecx,word ptr [ebp-8]
//以上两句movsx语句,把ebp-4,和ebp-8扩展给了eax和ecx(四字节)
所以由上得出,char和short运算的时候会先转为int类型。
char --> short --> int --> float --> double
看上面箭头标注,char和short运算的时候,会先转为int类型。
int和float类型计算,最后是float类型
float和double类型计算,最后是double类型
2. 常见运算符
算数运算符:
那么假设,a是3,b是2,上面都是多少呢?
a+b=5
a-b=1
a*b=6
a/b=1.5
a%b=1
a++ = 4
++a = 4
–a = 2
a-- = 2
++a / a++和--a / a--都是一个结果,区别在哪?
a++ 是先使用再+1
++a 是先+1,再使用
–a 和 a–同理
#include <stdio.h>
void main()
{
int a, b, c;
a = 5; //此时 a的值是5
b = a++; //a一开始为5, 先返回a的值给b,b此时就为5,然后 a再执行++,a才变成了6。
printf("a = %d, b = %d \n", a, b); //输出 a = 6, b = 5
c = ++a; // a先++,a此时就是7了,然后再把a的值给c,c这时候就等于7。
printf ("a = %d, c = %d \n", a, c); //输出 a = 7, c = 7
return 0;
}