Hy!Извините за мой плохой английский, в любом случае вопросы:
У меня есть этот код в target-c:
unsigned int a = 1; int b = -2 if (b < a);
Я ожидаю истину, и вместо результата if(b < a) ложьпочему?
if(b < a)
C автоматически преобразует -2 в беззнаковое целое при сравнении.Результатом является то, что сравнение фактически (4294967294 <1), а это не так. </p>
Вы сравниваете подписанный с неподписанным.Значение со знаком повышается до без знака, что приводит к большому числу (я думаю, 0xFFFFFFFD), которое определенно больше 1
0xFFFFFFFD
int b переводится во временную переменную без знака для сравнения. Это означает, что в конечном итоге он будет больше, чем.
См. Здесь для правил: http://msdn.microsoft.com/en-us/library/3t4w2bkb(VS.80).aspx
Бросьте "без знака".
Если вы посмотрите на двоичное представление -2, а затем используете это двоичное значение в качестве целого без знака, то b> a
Надеюсь, это поможет!
Вы не можете сравнивать числа со знаком и без знака.Скорее всего, без знака повышается до значения со знаком, что приводит к неопределенному поведению или действительно большому числу (в зависимости от того, как хранилось отрицательное значение).