在Windows中将__int64转换为long

Jay*_*Jay 3 c windows casting int64

如何在Windows(MSVC8和MSVC6)中将__int64转换为long?

正常的类型转换会有效吗?

另外,如何将long转换为__int64?如果long是负值,它会起作用吗?

注 - 我说的是__int64变量总是包含一个不超过32位长的值的场景.

Jic*_*hao 5

1.将long转换为__int64

Acorrding到MSDN上的__int64关键字:

_ _int64关键字声明一个新类型,一个64位(8字节)整数.与int,short和long类型一样,_ _int64类型具有相应的无符号版本,因此_ _int64关键字实际上可用于创建两种类型.

以下代码示例演示如何声明两个64位整数,一个是有符号的,另一个是无符号的:

__int64 signed_big_int; unsigned __int64 unsigned_big_int;

__int64已签名,它应该比long.更宽.所以你可以分配long__int64甚至没有类型演员,当然signed __int64支持负面长.

2.将__int64转换为long

可以转换__int64long,只有丢失数据的可能性.我的msvc8只警告我丢失数据的可能性.

3.注意:

C99定义了一个标准的64位整数类型命名int64_t和无符号版本uint64_t.stdint.h如果你想提供可移植代码,你应该使用它们,但不是__int64.

请注意,有在C++编程语言,MSVC没有使用标准的64位整数类型__int64,但在Linux世界中通常使用int64_tuint64_t它的类型定义为long longunsigned long long在C99的stdint.h.在这里我假设你的C++编译器支持的stdint.h头文件.