gpt4 book ai didi

c - unsigned 在 if 语句比较中变为 signed?

转载 作者:太空狗 更新时间:2023-10-29 17:02:14 25 4
gpt4 key购买 nike

我在这个网站上搜索了一个答案,发现了很多对无符号/有符号比较的回应,但这个问题是只比较无符号参数,但它仍然很有趣。

以下代码的问题是第一个 if 语句不会发生(“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 语句吗?

最佳答案

在表达式中:

if( (u16_varLow - u16_varHigh) > (unsigned short)5 )  

(u16_varLow - u16_varHigh) 将被提升为 int 并评估为 -65525。解决您的问题的方法是转换为无符号类型,就像您在“Does enter”代码中所做的那样。

s16_Res1 = u16_varLow - u16_varHigh; 产生 11 的原因是减法的结果 -65525 不适合 short。

关于c - unsigned 在 if 语句比较中变为 signed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com