@RomanSamets
C++, C, assembler, CS

Почему этот код работает ошибочно?

Почему результат этого кода не 0, а -1? Тип данных сломанный?
#include <stdio.h>

int main() {
    unsigned cash = 0;
    --cash;

    printf("%d", cash);

    return 0;
}
  • Вопрос задан
  • 78 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что %d трактует переданное значение как signed int.
Поставьте %u и получите беззнаковое значение UINT_MAX (0xFFFFFFFF).
Но ноль всё равно не получите, операции с беззнаковыми числами в C выполняются по модулю (UINT_MAX+1).
Ответ написан
Комментировать
0xD34F
@0xD34F
Всё работает правильно. Чтобы отобразить число как unsigned, вместо %d следует использовать %u.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы