Я знаю, что если мне нужно вычесть одно 32-битное число из другого, то в качестве результирующей переменной я должен использовать 64-битный тип.
Например:
uint32_t a = 1, b = 3123456789;
int diff = a - b;
неверно, потому что diff не может вместить результат.
Но я не могу понять, как работает мой фрагмент кода. >
#include
#include
#include
int main(void)
{
uint32_t a = 123;
uint32_t b = 260000;
int64_t diff = a - b;
int diff2 = a - b;
printf("DIFF:%ld\n", diff);
printf("DIFF:%" PRId64 "\n", diff);
printf("DIFF2:%d\n", diff2);
if(diff < 0)
puts("OK");
if(diff2 < 0)
puts("OK2");
return 0;
}
Почему правильный ответ находится в diff2, а не в diff? Как .. большое целое число со знаком не может содержать фактический результат вычитания двух меньших целых чисел без знака?
ВЫВОД:
DIFF:4294707419
DIFF:4294707419
DIFF2:-259877
OK2
Подробнее здесь: https://stackoverflow.com/questions/790 ... ubtraction