Я искал этот сайт для ответа и нашел много ответов на сравнение без знака / со знаком, но эта проблема в том, что сравниваются только параметры без знака, но все равно это забавно.
Проблема со следующим кодом заключается в том, что первое if
-статирование не происходит («привет»), как второе («мир»). Это я интерпретировал как вычисление, которое выполняется внутри if
-статации, генерирует отрицательное число, но точно такое же вычисление, выполненное с результатом, сохраненным в переменных, не выполняется (даже если результат сохраняется в переменной со знаком).
Используется компилятор 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
заявление также работало?