今天去参加了一个笔试,考试的语言是C语言.下面是一个题目的内容,大致是这样的.
#include <stdio.h>
int main( int argc, char *argv[] )
{
int a = 7;
int b = 10;
int c = 19;
c = a && b;
printf( "%d.\n", c );
}
问的是这个打印多少,以前一直没有关心过&&表达式的值.只知道当a如果是0的时候,会直接返回假,假是0.那当a不是0,那就的看b是不是真,如果是真,那会返回什么呢?真是纠结.知道会返回真,那真到底是多少?是1还是b的值,最后我填了b的值.回来反汇编之后,发现其实这些代码的反汇编代码是这样的.实际会定义一个0和1,作为返回值.
#include <stdio.h>
int main( int argc, char *argv[] )
{
00411390 push ebp
00411391 mov ebp,esp
00411393 sub esp,0E8h
00411399 push ebx
0041139A push esi
0041139B push edi
0041139C lea edi,[ebp-0E8h]
004113A2 mov ecx,3Ah
004113A7 mov eax,0CCCCCCCCh
004113AC rep stos dword ptr es:[edi]
int a = 7;
004113AE mov dword ptr [a],7
int b = 10;
004113B5 mov dword ptr [b],