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