- 论坛徽章:
- 0
|
原帖由 redhat008 于 2008-3-15 21:41 发表 ![]()
你知道补码么?
char一个字节,int四个字节。。
看看它们的二进制表示就了解了。
你等于没有说,我汇编代码都看了!不得其解,请大虾详细说明,为什么结果不一样?
19: int a=0;
0040EB1B C7 45 F8 00 00 00 00 mov dword ptr [ebp-8],0
20: int b=~0;
0040EB22 C7 45 F4 FF FF FF FF mov dword ptr [ebp-0Ch],0FFFFFFFFh
21: printf("int b= %d\n",b);
0040EB29 8B 45 F4 mov eax,dword ptr [ebp-0Ch]
0040EB2C 50 push eax
0040EB2D 68 14 50 42 00 push offset string "int b= %d\n" (00425014)
0040EB32 E8 19 45 FF FF call printf (00403050)
0040EB37 83 C4 08 add esp,8
22: char aa=0;
0040EB3A C6 45 F0 00 mov byte ptr [ebp-10h],0
23: char bb=~0;
0040EB3E C6 45 EC FF mov byte ptr [ebp-14h],0FFh
24: printf("char bb= %d\n",bb);
0040EB42 0F BE 4D EC movsx ecx,byte ptr [ebp-14h]
0040EB46 51 push ecx
0040EB47 68 54 50 42 00 push offset string "char bb= %d\n" (00425054)
0040EB4C E8 FF 44 FF FF call printf (00403050)
0040EB51 83 C4 08 add esp,8
25: unsigned int aaaa=0;
0040EB54 C7 45 E8 00 00 00 00 mov dword ptr [ebp-18h],0
26: unsigned int bbbb=~0;
0040EB5B C7 45 E4 FF FF FF FF mov dword ptr [ebp-1Ch],0FFFFFFFFh
27: printf("unsigned int bbbb= %d\n",bbbb);
0040EB62 8B 55 E4 mov edx,dword ptr [ebp-1Ch]
0040EB65 52 push edx
0040EB66 68 FC 4F 42 00 push offset string "unsigned int bbbb= %d\n" (00424ffc)
0040EB6B E8 E0 44 FF FF call printf (00403050)
0040EB70 83 C4 08 add esp,8
28: unsigned char aaaaa=0;
0040EB73 C6 45 E0 00 mov byte ptr [ebp-20h],0
29: unsigned char bbbbb=~0;
0040EB77 C6 45 DC FF mov byte ptr [ebp-24h],0FFh
30: printf("unsigned char bbbbb= %d\n",bbbbb);
0040EB7B 8B 45 DC mov eax,dword ptr [ebp-24h]
0040EB7E 25 FF 00 00 00 and eax,0FFh
0040EB83 50 push eax
0040EB84 68 38 50 42 00 push offset string "unsigned char bbbbb= %d\n" (0042503
0040EB89 E8 C2 44 FF FF call printf (00403050)
0040EB8E 83 C4 08 add esp,8
31: long aaaaaa=0;
0040EB91 C7 45 D8 00 00 00 00 mov dword ptr [ebp-28h],0
32: long bbbbbb=~0;
0040EB98 C7 45 D4 FF FF FF FF mov dword ptr [ebp-2Ch],0FFFFFFFFh
33: printf("long bbbbbb= %ld\n",bbbbbb);
0040EB9F 8B 4D D4 mov ecx,dword ptr [ebp-2Ch]
0040EBA2 51 push ecx
0040EBA3 68 E8 4F 42 00 push offset string "long bbbbbb= %ld\n" (00424fe
0040EBA8 E8 A3 44 FF FF call printf (00403050) |
|