TL; DR - для 64-битного целого числа без знака точной ширины, #include <stdint.h>
и использования uint64_t
.
Предположительно, U64
- это пользовательский typedef для 64-битной ширины без знака.целое число.
Если вы используете хотя бы C99-совместимый компилятор, он будет иметь <stdint.h>
с typedef
для 64-разрядного целого числа без знака без битов заполнения : uint64_t
,Однако может случиться так, что код нацелен на компилятор, у которого не определен стандарт uint64_t
.В этом случае может быть некоторый заголовок конфигурации, в котором тип выбран для U64
.Возможно, вы можете grep
файлы для typedef.*U64;
long
, с другой стороны, это подписанный тип .Из-за различных неопределенных и определяемых реализацией аспектов математики со знаком вам не захочется использовать тип со знаком для разбивки битов при всех.Другая сложность заключается в том, что в отличие от Java, C long
не имеет стандартизированной ширины;вместо этого long
может иметь ширину всего 32 бита - это так на большинстве 32-битных платформ и даже на 64-битных Windows.Если вам когда-нибудь понадобятся точные типы ширины, вы не будете использовать int
или long
.Только long long
и unsigned long long
гарантированно имеют ширину не менее 64 бит.