文章目录
- 测试
- 1、测试 CMP (int,int)
- 2、测试 CMP (int ,unsigned int)
- 3、测试 CMP (unsigned int ,unsigned int)
- 4、测试 CMP(int ,常量)
- 总结
测试
- 在IAR(8.40.2)平台下测试
- 单片机为STM32F103ZET6
1、测试 CMP (int,int)
int test_fun(int a, int b)
{
if(a>b)
{
return 1;
}
else
{
return 0;
}
}
2、测试 CMP (int ,unsigned int)
int test_fun(int a, unsigned int b)
{
if(a>b)
{
return 1;
}
else
{
return 0;
}
}
3、测试 CMP (unsigned int ,unsigned int)
int test_fun(int a, unsigned int b)
{
if((unsigned int)a>b)
{
return 1;
}
else
{
return 0;
}
}
4、测试 CMP(int ,常量)
test_fun(-2, 3);
printf("%d",a > 0x7FFFFFFA);
printf("%d",a > 0x8FFFFFFA);
总结
- 1、判断两边符号相同时,判断结果和理论一样是正常的。
- 2、判断两边符号不相同时,判断结果会和理论不一样,需要进行类型转换后再做比较。
- int和unsigned int 比较时,int会自动转换为unsigned int类型。其实也就是将int类型存储数值的补码当作unsigned int数据处理了。
- 正数的补码等于原码,负数的补码等于反码+1。负数强转为正数,直接将负数补码当作原码处理就是强转后的值。
- 3、都为int类型的判读汇编语句和都为unsigned int类型的判断汇编语句是不一样的。
- 4、在人为判断结果时,
- 如果判断两边符号相同,则以理论比较结果为准。(该谁大就谁大)
- 如果判断两边符号不相同,则需要将符号转换后再做比较。(负数强转正数时,取其补码当原码)
- 5、在32位单片机平台中,常量默认为int类型。如果有特殊需求,需要对常量进行类型修饰。