main() {
if ( -1 < (unsigned char) 1 )
printf("less than");
else
printf("NOT less than");
}
Выводит меньше, чем
. Поскольку (символ без знака) 1
преобразуется в (знаковый символ) 1
, а затем: (знаковый) -1 <(знаковый) 1
, таким образом, вывод будет меньше, чем
.
Но если я изменю приведенный выше код на if ((-1 <(unsigned int) 1)
, то результат будет НЕ меньше чем
.
Итак, очевидно, что когда я меняю unsigned char на unsigned int:
int a = -1;
вместо '-1' тот же результат Вопросы:
во время арифметики со знаком и без знака ... как быть уверенным, что знак будет преобразован в беззнаковый или наоборот.
почему преобразование отличается для арифметики между unsigned char и char: очевидно, что unsigned преобразуется в знаковый и беззнаковый int и int: очевидно, подписанный - это преобразователь в беззнаковый
PS: Я знаю, что это не зависит от компилятора ... поэтому не говорите, что это так.