运算符与表达式
什么是运算符?什么是表达式?
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 只有一个结果
位运算符
<< >> ~ | ^ & 左移 右移 非 或 异或 与
赋值运算符:
= 拓展赋值
条件运算符
?:
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论