请问4怎么在反汇编中变成80000003是什么?十六进制? 还是not补码了?怎么计算的?
80000003就是80000003H,是十六进制。至于为什么是80000003,其实对于取余运算,如果一个数a满足a=2^b,那么可以等效如下计算d%a=d&(a-1)。
也就是t%4=t&(4-1)=t&3
80000003
的二进制就是10000000000000000000000000000011
不看最高位的1
就是3
感觉这个汇编应该是经过优化的,没有使用除法计算
4的十六进制还是4
他是80000000003 ,因为它考虑了负数。and 后面接着就是 jns 正于是跳转,否则继续处理。
与上 80000003h 就是保留正负符号位和保留二进制的最后2位。
t % 4 就是求一个数除以3后的余数。不考虑正负数,其实就是 t & 3 ,考虑保留正负符号位,就是 t & 0x80000003
反汇编的结果是正确的
这是编译器做了优化后的结果。