-2 <1 = ложно. Зачем? - PullRequest
       10

-2 <1 = ложно. Зачем?

4 голосов
/ 13 января 2011

Hy!Извините за мой плохой английский, в любом случае вопросы:

У меня есть этот код в target-c:

unsigned int a = 1; 
int b = -2
if (b < a);

Я ожидаю истину, и вместо результата if(b < a) ложьпочему?

Ответы [ 5 ]

9 голосов
/ 13 января 2011

C автоматически преобразует -2 в беззнаковое целое при сравнении.Результатом является то, что сравнение фактически (4294967294 <1), а это не так. </p>

7 голосов
/ 13 января 2011

Вы сравниваете подписанный с неподписанным.Значение со знаком повышается до без знака, что приводит к большому числу (я думаю, 0xFFFFFFFD), которое определенно больше 1

3 голосов
/ 13 января 2011

int b переводится во временную переменную без знака для сравнения. Это означает, что в конечном итоге он будет больше, чем.

См. Здесь для правил: http://msdn.microsoft.com/en-us/library/3t4w2bkb(VS.80).aspx

2 голосов
/ 13 января 2011

Бросьте "без знака".

Если вы посмотрите на двоичное представление -2, а затем используете это двоичное значение в качестве целого без знака, то b> a

Надеюсь, это поможет!

0 голосов
/ 13 января 2011

Вы не можете сравнивать числа со знаком и без знака.Скорее всего, без знака повышается до значения со знаком, что приводит к неопределенному поведению или действительно большому числу (в зависимости от того, как хранилось отрицательное значение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...