|
发表于 2018-5-7 16:56:46
|
显示全部楼层
看汇编语言吧
- struct Test
- {
- unsigned int a : 1;
- unsigned int b : 1;
- unsigned int c : 30;
- /*unsigned int c:2;*/
- };
- struct Test test;
- test.a = 0;
- 00401A4E mov eax,dword ptr [test]
- 00401A51 and eax,0FFFFFFFEh
- 00401A54 mov dword ptr [test],eax
- test.b = 1;
- 00401A57 mov eax,dword ptr [test]
- 00401A5A or eax,2
- 00401A5D mov dword ptr [test],eax
- test.c = 2;
- 00401A60 mov eax,dword ptr [test]
- 00401A63 and eax,3
- 00401A66 or eax,8
- 00401A69 mov dword ptr [test],eax
- printf("a = %d\nb = %d\nc = %d\n", test.a, test.b, test.c);
- 00401A6C mov eax,dword ptr [test]
- 00401A6F shr eax,2
- 00401A72 and eax,3FFFFFFFh
- 00401A77 push eax
- 00401A78 mov ecx,dword ptr [test]
- 00401A7B shr ecx,1
- 00401A7D and ecx,1
- 00401A80 push ecx
- 00401A81 mov edx,dword ptr [test]
- 00401A84 and edx,1
- 00401A87 push edx
- 00401A88 push offset string "a = %d\nb = %d\nc = %d\n" (0493EECh)
- 00401A8D call _printf (03FC07Ah)
- 00401A92 add esp,10h
- printf("sizeof for test %d", sizeof(test));
- 00401A95 push 4
- 00401A97 push offset string "sizeof for test %d" (0493FF0h)
- 00401A9C call _printf (03FC07Ah)
- 00401AA1 add esp,8
- return 0;
- 00401AA4 xor eax,eax
复制代码 |
|