1. Конвертировать долго в __int64
По MSDN для ключевого слова __int64
:
Ключевое слово _ _int64 объявляет новый
тип, 64-разрядное (8-байтовое) целое число. Как
с типами int, short и long,
тип _ _int64 имеет соответствующий
версия без знака, поэтому _ _int64
Ключевое слово на самом деле может быть использовано для создания
два типа.
В следующем примере кода показано, как
объявить два 64-разрядных целых числа, одно
подписано, а другое без знака:
__ int64 signature_big_int; unsigned __int64 unsigned_big_int;
__int64
подписано, и оно должно быть шире, чем long
. Так что вы можете назначить long
на __int64
даже без приведения типов и, конечно, signed __int64
поддерживает отрицательный long.
2. Конвертировать __int64 в long
Можно преобразовать __int64
в long
, только с возможностью потери данных. Мой msvc8 только предупреждает меня о возможности потери данных.
3. Примечание
C99 определил стандартный 64-битный целочисленный тип с именем int64_t
и беззнаковую версию uint64_t
в stdint.h
. Если вы хотите предоставить переносимый код, вы должны использовать их, но не __int64
.
Обратите внимание, что в языке программирования C ++ нет стандартного 64-битного целочисленного типа, MSVC использует __int64
, но в мире Linux вы обычно используете int64_t
или uint64_t
, тип которого определен как long long
или unsigned long long
в C99 stdint.h
. Здесь я предполагаю, что ваш компилятор C ++ поддерживает заголовочный файл stdint.h
.