Int64_t не может принять фактический результат вычитанияC++

Программы на C++. Форум разработчиков
Anonymous
 Int64_t не может принять фактический результат вычитания

Сообщение Anonymous »

Я знаю, что если мне нужно вычесть одно 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

Вернуться в «C++»