在 Windows 中将 __int64 转换为 long
如何在 Windows(MSVC8 和 MSVC6)中将 __int64 转换为 long?
正常的打字能起作用吗?
另外,将 long 转换为 __int64 怎么样?如果long是一个负值,它会起作用吗?
注意 - 我正在讨论这样一种场景,其中 __int64 变量将始终包含一个长度不超过 32 位的值。
How to convert __int64 to long in Windows (MSVC8 & MSVC6)?
Will a normal typecasting work?
Also, how about converting long to __int64? If the long is a negative value, will it work?
Note - I am talking of a scenario in which the __int64 variable will always contain a value which will not be more than 32 bits long.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
1.将 long 转换为 __int64
根据 MSDN 在
__int64
关键字上:__int64
是有符号的,它应该比long
更宽。因此,您可以将long
分配给__int64
,甚至不需要类型转换,当然还有signed __int64
支持负long。2.将__int64转换为long 将
__int64
转换为long
是可以的,只是有可能丢失数据。我的msvc8只警告我可能会丢失数据。3.注意:
C99 在
stdint.h
中定义了一个名为int64_t
的标准 64 位整数类型和无符号版本uint64_t
。如果你想要要提供可移植代码,您应该使用它们,但不应该使用__int64
。请注意,C++ 编程语言中没有标准的 64 位整数类型,MSVC 使用
__int64
,但在 Linux 世界中通常使用int64_t
或uint64_t
它的类型在 C99 的stdint.h
中定义为long long
或unsigned long long
。这里我假设你的 C++ 编译器支持stdint .h
头文件。1. Convert long to __int64
Acorrding to MSDN on the
__int64
keyword:__int64
is signed,and it should be wider thanlong
.So you could assignlong
to__int64
without even a type cast and of course thesigned __int64
support negative long.2. Convert __int64 to long
It is OK to convert
__int64
tolong
,only with possibility of loosing data.My msvc8 only warn me of the pssibility of loss of data.3. Note:
C99 defined a standard 64-bit integer type named
int64_t
and unsigned versionuint64_t
instdint.h
.If you want to provide portable code, you should use them but not__int64
.Notice there is no standard 64-bit integer type in C++ programming language,MSVC use
__int64
,but in linux world you normally useint64_t
oruint64_t
which is type defined aslong long
orunsigned long long
in C99'sstdint.h
.Here I assume your C++ compiler support thestdint.h
header file.是的,类型转换没问题,只要你能保证你的 __int64 值始终在 long 的范围内。向另一个方向进行转换,即从 long 到 __int64,无论涉及什么值,都不会出现问题。
Yes, typecasting will be fine, so long as you can guarantee your __int64 values are always within the range of a long. Casting in the other direction, i.e. from long to __int64 will not be a problem regardless of the values involved.
这是一个小测试。如果使用
/W3
进行编译,则需要显式转换来避免警告:输出为:
Here is a small test. The explicit casts are necessary to avoid the warnings if compiled with
/W3
:The output is:
32 位值可以毫无问题地分配给 64 位变量,无论有符号还是无符号。可以将 64 位值分配给 32 位变量,但如果需要超过 32 位来存储该值,则可能会丢失数据,因为它将被截断以适合较小的变量。
32-bit values can be assigned to 64-bit variables without any problems, signed or unsigned. Assigning a 64-bit value to a 32-bit variable can be done, but loss of data is possible if more than 32 bits are required to store the value, as it will be truncated to fit into the smaller variable.