Какой тип данных C может представлять 40-битное двоичное число?

Мне нужно представить 40-битное двоичное число. Какой тип данных C следует использовать для этого?

4 ответа

Решение

Если вы используете компилятор, совместимый с C99 или C11, используйте int_least64_t для максимальной совместимости. Или, если вы хотите беззнаковый тип, uint_least64_t, Они оба определены в <stdint.h>

<stdint.h> обычно также определяет int64_t, но так как это не требуется стандартом, это не может быть определено в каждой реализации. Тем не мение:

  • int_least64_t - не менее 64 бит, и
  • int_fast64_t - самый быстрый размер в этой реализации не менее 64 бит

оба должны присутствовать в C99 и C11 (см. § 7.18.1.2-3 в стандарте C99 и § 7.20.1.2-3 в стандарте C11).


Хотя C99 указывает, что long long по крайней мере 64 бита на конкретной машине (п. 5.2.4.2.1), типы в <stdint.h> предназначены для явного переноса.

Вы можете прочитать больше о целочисленных размерах на разных платформах здесь. Обратите внимание, что размер целочисленных типов является проблемой с long тип данных - в 64-битной Windows в настоящее время он 32-битный, тогда как в 64-битной Linux это 64-битная. По этой причине я считаю, что вы наиболее безопасно используете типы из <stdint.h>

Стоит отметить, что некоторые считают, что long long более читабельно Лично я предпочитаю типы из <stdint.h> потому что они позволяют вам сказать, что вы имеете в виду, когда используете их - что я считаю более читабельным. Конечно, удобочитаемость часто зависит от вкуса - и если вы работаете с существующей кодовой базой, я просто буду следовать тому, что они делают:)


Если ваш компилятор поддерживает только C89, то решение R.. позволит вам до 53 бит с целочисленной точностью.

long long целочисленный тип, по крайней мере, с 64 битами Он будет соответствовать знаковым 40-битным значениям на всех платформах. Вы также можете использовать unsigned long long для беззнаковых значений 64 бит или более.

Ты можешь использовать long long, который может содержать 64 или более бит. Для получения дополнительной информации см.

http://en.cppreference.com/w/cpp/language/types

http://en.wikipedia.org/wiki/Integer_(computer_science)

Определите целое число 64-битной ширины в Linux

Существующие ответы хороши, но если вам нужна поддержка C89, double сможет хранить 40-битные целые числа точно во всех реализациях, соответствующих стандарту IEEE 754.

Другие вопросы по тегам