C语言反汇编的一个奇怪问题
时间:10-02
整理:3721RD
点击:
同样一个C语言式子,只是一个采用16进制,一个采用10进制,为何反汇编代码不同?
各位前辈们是否有遇到这种问题?是什么原因呢。
for example:
void a(void)
{
unsigned int MAX_C, MIN_C;
int OFFSET_C;
OFFSET_C = (65535 - MAX_C - MIN_C)>>1 ;
}
与
void a(void)
{
unsigned int MAX_C, MIN_C;
int OFFSET_C;
OFFSET_C = (0xffff- MAX_C - MIN_C)>>1 ;
}
反汇编的结果就不一样,请问各位前辈这是为什么?
各位前辈们是否有遇到这种问题?是什么原因呢。
for example:
void a(void)
{
unsigned int MAX_C, MIN_C;
int OFFSET_C;
OFFSET_C = (65535 - MAX_C - MIN_C)>>1 ;
}
与
void a(void)
{
unsigned int MAX_C, MIN_C;
int OFFSET_C;
OFFSET_C = (0xffff- MAX_C - MIN_C)>>1 ;
}
反汇编的结果就不一样,请问各位前辈这是为什么?
请问在哪儿加一个什么样的强制类型转换符?
因为如果编译65535的话,编译器会把它当作long编译,而编译0xffff会把它当作short编译。
因此你应该在65535之前加上(unsigned int)