【发布时间】:2010-11-17 12:27:25
【问题描述】:
我在这个网站上搜索了一个答案,发现很多对无符号/有符号比较的响应,但这个问题是只比较了无符号参数,但它仍然很有趣。
以下代码的问题是第一个if-statment 没有发生(“hello”),而第二个(“world”)发生了。我将其解释为在if-statment 内部完成的计算会生成一个负数,但与保存到变量的结果完全相同的计算不会(即使结果被保存到有符号变量)。
使用的编译器是gcc 4.4。
unsigned short u16_varHigh;
unsigned short u16_varLow;
unsigned short u16_Res1;
signed short s16_Res1;
u16_varHigh = 0xFFFF;
u16_varLow = 10;
u16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
s16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
// Does not enter
if( (u16_varLow - u16_varHigh) > (unsigned short)5 )
{
printf( "hello" );
}
// Does enter
if( (unsigned short)(u16_varLow - u16_varHigh) > 5 )
{
printf( "world" );
}
谁能为我解释一下,或许能想出一个解决方案来修复,以便第一个if-statement 也能正常工作?
【问题讨论】:
-
我不同意。类似主题,但不重复。
标签: c comparison if-statement unsigned