вопрос на самом деле происходит из этого фрагментаКак вы можете безопасно сравнить 32-битное целое число с 64-разрядным целым числом в C++ и как сравнивается целое число со знаком?
int a = -1;
unsigned int c=1;
long long b = c<<31;
printf("%d %lld %d\n",a,b,a>b);
Я проверил это на Linux GCC (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3), результат: -1 2147483648 0
На самом деле я не могу понять результат. Я полагаю, что когда вы делаете a> b, a сначала преобразуется в long long, поэтому a 0000 ... 01111 ... 1 (32 нуля + 32 единицы), b - 000..01000 ... 00 (32 нулей + один + 31 нулей), то a должно быть больше b.
Я пропустил что-то цельное сравнение в C++?
Нет, преобразование между подписанными типами не работает. -1 преобразуется в -1, а не к некоторому большому положительному значению. –