ISO C99 intypes.h: printf не печатает шестнадцатеричное значение для uint64_t - PullRequest
1 голос
/ 09 ноября 2010

Мой код такой (main.c):

#include <inttypes.h>
#include <stdio.h>


int
main(int argc, char **argv)
{
 uint64_t n;

 n = UINT64_MAX;

 printf("%" PRIX64 " %" PRIu64 "\n", n, n);

 return 0;
}

Вывод программы такой:

FFFFFFFFFFFFFFFF 18446744073709551615

Но я ищу это:

10000000000000000 18446744073709551615

Я использую GCC (gcc -std = c99 main.c): gcc (Ubuntu / Linaro 4.4.4-14ubuntu5) 4.4.5

Поиск ответа в Google дал мне это: http://bytes.com/topic/c/answers/565055-convert-64-integer-hex-octet-string

Теперь я потерян. Что я делаю не так?

1 Ответ

7 голосов
/ 09 ноября 2010

значение UINT64_MAX должно быть 0xffffffffffffffff, так как это значение для всех 64-битных значений. Я не понимаю, почему вы ожидаете 0x10000000000000000 (для представления требуется 65 бит) Также 18446744073709551615 в десятичном формате равен 0xffffffffffffffff, поэтому printf делает все правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...