21,600
社区成员
发帖
与我相关
我的任务
分享
int a = 0x1, b = 32;
a = a << b;
printf("%d\n", a);
61 [1] {
0x401691 55 push ebp
0x401692 <+0x0001> 89 e5 mov ebp,esp
0x401694 <+0x0003> 83 e4 f0 and esp,0xfffffff0
0x401697 <+0x0006> 83 ec 20 sub esp,0x20
0x40169a <+0x0009> e8 21 0e 00 00 call 0x4024c0 <__main>
62 [1] int a = 0x1, b = 32;
0x40169f <+0x000e> c7 44 24 1c 01 00 00 00 mov DWORD PTR [esp+0x1c],0x1
0x4016a7 <+0x0016> c7 44 24 18 20 00 00 00 mov DWORD PTR [esp+0x18],0x20
63 [1] a = a << b;
0x4016af <+0x001e> 8b 44 24 18 mov eax,DWORD PTR [esp+0x18]
0x4016b3 <+0x0022> 89 c1 mov ecx,eax
0x4016b5 <+0x0024> d3 64 24 1c shl DWORD PTR [esp+0x1c],cl
64 [1] printf("%d\n", a);
0x4016b9 <+0x0028> 8b 44 24 1c mov eax,DWORD PTR [esp+0x1c]
0x4016bd <+0x002c> 89 44 24 04 mov DWORD PTR [esp+0x4],eax
0x4016c1 <+0x0030> c7 04 24 65 a0 40 00 mov DWORD PTR [esp],0x40a065
0x4016c8 <+0x0037> e8 63 ff ff ff call 0x401630 <printf(char const*, ...)>
193 [1] }
0x4016cd <+0x003c> b8 00 00 00 00 mov eax,0x0
0x4016d2 <+0x0041> c9 leave
0x4016d3 <+0x0042> c3 ret
int a = 0x1,b=16;
a = a<<b;
printf("%d\n",a);
a = a<<b;
printf("%d\n",a);
输出 65536 和 0。
65536没错,说明1被移动到了bit 16 上。