- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(void)
{
uint32_t uint32max = UINT32_MAX;
int32_t int32_minus_one = -1;
printf("uint32_max = %" PRIu32 "\n", uint32max);
printf("int32_minus_one = %" PRIi32 "\n", int32_minus_one);
if (uint32max > int32_minus_one)
{
puts("uint32max > int32_minus_one");
}
else if (uint32max < int32_minus_one)
{
puts("uint32max < int32_minus_one");
}
else
{
puts("uint32max == int32_minus_one");
}
return EXIT_SUCCESS;
}
Почему в Си нет особого правила при сравнении signed и unsigned типов, ну типа если значение в signed типе отрицательно, то он полюбасу будет меньше любого unsigned значения? А то говно какое-то.
(нет, я понимаю почему так происходит, но все равно говно)
есть разные инструкции - сравнить два знаковых и два беззнаковых числа. В процессорах, я думаю, нету операций смешанных сравнений.
Ну и я думаю это одно из следствий статической типизации: типа и не предполагается, что будут сравниваться данные разных типов. Ну и действительно: зачем? Что может заставить сравнивать число, которое заведомо положительное с заведомо отрицательным? Как можно сравнить утку с кошкой? Квадрат с кругом? Разве что только по площади\объему, но площадь\объем - это тоже отдельный тип.
То есть сравнение данных разных типов - говнокод, и, наверное багор (я хз смысл этого слова).
В процессоре много чего нету. Что не мешает конпелятору составлять нужную операцию из нескольких.
В данном случае можно было бы трактовать s > u как s >= 0 && s > u. Именно это программист обычно и имеет в виду перед тем как наступить на грабли.
Читай мой второй абзац.
Иначе конфликты неизбежны: в одной либе сделали координату как int, в другой как uint, а ты сиди и ебись теперь.
За всё нужно платить
впрочем, я уже когда-то бугуртил по этому поводу
-5 -4 -3 -2 -1
Учитель говорит: ну вот еще один придет, и вообще никого не останется
*tulpenmanie
Прелесть в том, что фьючерсов (или как там называется право на покупку) на тюльпаны было продано больше, чем физически можно вырастить тюльпанов
У растоблядей тоже беззнаковый дерьмотип, но там не получится проебать выход за пределы при касте.
Ну вернее для int'ов то оно есть (потому что в long кастуют), а вот long и unsigned long там тупо нельзя сравнить.
Wir werden angegriffen! Alle posten besetzen. Ich wederchole: wir werden angegriffen!
Wir werden angegriffen! Alle posten besetzen. Ich wederchole: wir werden angegriffen!