爱上她_不过一场 发表于 2016-3-6 20:42:08

这个题是死循环吧

#include <stdio.h>

main()
{
      int a = -7;
      while( a-- );
                ;
      printf("%d", a);
}

machimilk 发表于 2016-3-7 01:03:50

a值是-7 每次递减1
拿32位int型系统举例
当a变成   -2147483648的时候
再减1就变成了正的2147483647(为什么这么变就要补习二进制知识了)
然后还是递减1,当a变成0的时候条件不成立了
但是while条件里面的a还 - - 了,所以答案应该是-1

人造人 发表于 2016-3-6 21:24:14

不是死循环,需要一点时间,耐心等等

爱上她_不过一场 发表于 2016-3-6 21:29:31

人造人 发表于 2016-3-6 21:24
不是死循环,需要一点时间,耐心等等

怎么解释?

9528 发表于 2016-3-7 00:48:50

5:            int a = -7;
0040D748   mov         dword ptr ,0FFFFFFF9h
6:            while( a-- );
0040D74F   mov         eax,dword ptr
0040D752   mov         ecx,dword ptr
0040D755   sub         ecx,1
0040D758   mov         dword ptr ,ecx
0040D75B   test      eax,eax
0040D75D   je          main+31h (0040d761)
0040D75F   jmp         main+1Fh (0040d74f)
7:                  ;
8:            printf("%d", a);

爱上她_不过一场 发表于 2016-3-7 08:15:10

machimilk 发表于 2016-3-7 01:03
a值是-7 每次递减1
拿32位int型系统举例
当a变成   -2147483648的时候


多谢!!!

爱上她_不过一场 发表于 2016-3-7 08:17:26

9528 发表于 2016-3-7 00:48
5:            int a = -7;
0040D748   mov         dword ptr ,0FFFFFFF9h
6:            while( ...

虽然看不懂,但还是谢谢你了!!!汇编还没学

小鸡炖蘑菇, 发表于 2016-3-7 18:07:43

楼上正解

counting_stars 发表于 2016-3-12 19:02:20

5楼正解 补码知识

Whitehat_K 发表于 2016-5-22 11:36:28

学习了...

_丶 发表于 2016-5-24 22:55:21

为什么5楼没了
页: [1]
查看完整版本: 这个题是死循环吧