代码
int main(int arg) { arg = -13; printf("%d", arg/8); }
反汇编
005925FF mov eax,dword ptr [arg] 00592602 cdq 00592603 and edx,7 00592606 add eax,edx 00592608 sar eax,3
推导结论
cdq 扩展符号位 到 edx 如果是fff 就加上7 否则加0
对应公式就是
如果a/b=q
a<0 就有 (a+b-1)/b 向下取整 =q
a>0 就有a/b 向下取整=q