Блог пользователя krock22

Автор krock22, история, 8 лет назад, По-русски

Всем привет.

Codeforces при отправке предупреждает, что лучше использовать спецификатор %I64d, чем %lld при чтении и записи 64-битных целых чисел на C++. Но при этом, если заслать код с %lld и выбрать компилятор GNU G++11 5.1.0, код сработает ровно так же, как и с %I64d. Тогда в чем же загвоздка, почему на Codeforces до сих пор возникает такое предупреждение?

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
8 лет назад, # |
Rev. 3   Проголосовать: нравится -23 Проголосовать: не нравится

Спецификатор %lld соответствует типу long long, а %l64d — типу int64_t. Тип long long не обязан содержать 64 бита. Согласно стандарту, этот тип должен быть больше, чем unsigned long и может иметь разный размер, в зависимости от платформы. int64_t имеет размет 64 бита всегда.

»
8 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

Когда-то давно точно были проблемы с этим. Вроде как уже пару лет все работает нормально.