C语言6 运算符和表达式

admin 2018年5月13日02:03:58评论469 views字数 949阅读3分9秒阅读模式
摘要

表达式不论怎么复杂。最终只有一个结果不同类型运算结果类型证明的例子:对应汇编片段:


运算符与表达式

什么是运算符?什么是表达式?

int x,y; x+y x-y  x>y x==y x=y

表达式的结果

(x+y)*(x-y)  char => short => int => float => double /*如果x和 y类型 不同,最终结果按照上面结果类型转换*/

表达式不论怎么复杂。最终只有一个结果

不同类型运算结果类型证明的例子:

void main() {     char x =1;     short y = 2;     int z = x + y;     return }

对应汇编片段:

mov byte ptr [ebp-4],1  mov word ptr [ebp-8],offset main+20h(00401030)  movsx eax,byte ptr [ebp-4] movsx ecx,word ptr [ebp-8] add  eax,ecx mov dword ptr [ebp-0Ch],eax

运算符

算术运算符

+   -   *   /   %   ++  -- 加  减  乘  除  取余  自加 自减  int i = 1; 

++i 和 i++

/*i++和++i的区别 i++ 先运算再自加 ++i 先自加再运算*/  ++i; mov eax,dword ptr [ebp-4] add eax,1 mov dword ptr [ebp-4],eax  i++; mov eax,dword ptr [ebp-4] add eax,1 mov dword ptr [ebp-4],eax  这俩其实是一样的!!但是为啥有这个 前后的区别呢? 往下看~~~  printf("%d /n",i++);  mov eax,dword ptr [ebp-4] mov dword ptr [ebp-8],eax mov ecx,dword ptr[ebp-8] push ecx push offset string "%d /n" (0042201c) mov edx,dword ptr [ebp-4] add edx,1 mov dword ptr [ebp-4],edx call printf(00401070)  所以i++ 就是先压入 i的值之后,才会 +1 也就是先让函数使用i运算后,才会+1  反之亦然 ++i 则是先+1 再运算

关系运算符

<   <=      >   >=  ==  != 关系运算符的值只能是0或1 关系运算符的值为真时,结果值都为1 关系运算符的值为假时,结果值都为0

逻辑运算符

!   %%  || x>y && x<z  只有一个结果 x>y || x<z  只有一个结果

位运算符

<<   >>   ~   |   ^    & 左移 右移  非   或  异或  与

赋值运算符:

= 拓展赋值

条件运算符

?:

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2018年5月13日02:03:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   C语言6 运算符和表达式https://cn-sec.com/archives/51464.html

发表评论

匿名网友 填写信息