一道“简单”的笔试题 (c /c++ ,汇编)
来源:互联网 发布:led显示屏网络推广 编辑:程序博客网 时间:2024/05/16 11:03
int a = 1;
int b = 2;
int c = 1;
z = a && b || ++c;
cout<<"z: c:"<<z<<c<<endl;
问输出z, c的值。 直接得到了 1, 2. 但是结果错了。 为什么, 自己以为答案给错了呢, 一直纠结了好几天了,决心用程序看看。
bool z ;
int a = 1;
004114DE C7 45 EC 01 00 00 00 mov dword ptr [a],1
int b = 2;
004114E5 C7 45 E0 02 00 00 00 mov dword ptr [b],2
int c = 1;
004114EC C7 45 D4 01 00 00 00 mov dword ptr [c],1
z = a && b || ++c;
004114F3 83 7D EC 00 cmp dword ptr [a],0
004114F7 74 06 je wmain+3Fh (4114FFh)
004114F9 83 7D E0 00 cmp dword ptr [b],0
004114FD 75 17 jne wmain+56h (411516h)
004114FF 8B 45 D4 mov eax,dword ptr [c]
00411502 83 C0 01 add eax,1
00411505 89 45 D4 mov dword ptr [c],eax
00411508 75 0C jne wmain+56h (411516h)
0041150A C7 85 0C FF FF FF 00 00 00 00 mov dword ptr [ebp-0F4h],0
00411514 EB 0A jmp wmain+60h (411520h)
00411516 C7 85 0C FF FF FF 01 00 00 00 mov dword ptr [ebp-0F4h],1
00411520 8A 8D 0C FF FF FF mov cl,byte ptr [ebp-0F4h]
00411526 88 4D FB mov byte ptr [z],cl
cout<<"z: c:"<<z<<c<<endl;
。。。。。略
注意以上红色部分, 可以看到,生成的汇编语言很直白的告诉我们, 当a, b非0时, 直接将1给了z, 之后并没有再用到c,也就不可能c+1了。 这又让我想起, &&, || 的用法。 && 前边为真才去计算&&后边,否则不再计算机; || 当前边为真不再计算后边。
这脑子,不好使了。
- 一道“简单”的笔试题 (c /c++ ,汇编)
- C的一道笔试题
- 一道C笔试题
- 曾经的一道C语言笔试题
- 一道C语言的指针笔试题
- C/Python实现的一道笔试题
- 一道猫和老鼠吵醒主人的笔试题(C#)
- 微软的一道C语言笔试题(转)
- 一道C语言笔试题
- 大华一道C笔试题
- 一道简单的笔试题
- 一道简单的笔试题
- Problem C: 很简单的一道题
- 一道简单的C语言题
- 一道简单的C语言题
- 一道阿里巴巴程序笔试题的详解(C#)
- 想到一道考察C功底的笔试题
- 一道简单的C#选择题
- 【maven】maven项目出现错误
- open_clientfd 和 open_listenfd函数
- C# Lambda 表达式
- cocos2dx之CCTargetedAction
- 动态生成控件及添加事件
- 一道“简单”的笔试题 (c /c++ ,汇编)
- MD5加密
- 单词博弈的c#求解--在线编程大赛的题
- window.showModalDialog以及window.open用法简介
- d3
- 在Eclipse里使用SVN必装Subclipse插件
- iOS开发 键盘添加工具条(toolbar)
- 优秀程序员的6个共同特质
- 写一个自己的javascript库