http://msdn.microsoft.com/en-us/library/windows/desktop/aa383742%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/windows/desktop/aa383742%28v=vs.85%29.aspx
它们应该这样使用,在 LowPart 和 HighPart 上设置两个 32 位值,然后在 QuadPart 上执行算术。
int a,b,c;
ULARGE_INTEGER u;
...
u.LowPart = a;
u.HighPart = b;
u.QuadPart += c;
因此,如果您要在 QuadPart(64 位)上执行算术,无论如何您都需要 64 位处理器,对吗?那么重点是什么呢?为什么不直接将值分配给 QuadPart?
您不需要 64 位处理器即可对 64 位数据类型执行算术。据我所知,所有 32 位编译器都支持 64 位整数算术。如果硬件不允许本机算术,则编译器必须生成代码来执行算术。通常,这将利用编译器 RTL 中的支持函数。
该结构旨在供不提供对 64 位数据类型的本机支持的编译器使用。很文档 http://msdn.microsoft.com/en-us/library/windows/desktop/aa383742.aspx您链接到的内容很清楚:
Note您的 C 编译器可能本身支持 64 位整数。为了
例如,Microsoft Visual C++ 支持__int64大小的整数类型。
有关详细信息,请参阅 C 附带的文档
编译器。
不支持本机 64 位整数的编译器将无法处理QUADPART
联合成员作为整数。
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
和定义ULONGLONG
:
#if !defined(_M_IX86)
typedef unsigned __int64 ULONGLONG;
#else
typedef double ULONGLONG;
#endif
当然,过去 10 年(或更长时间)编写的所有编译器都将原生支持 64 位整数。但这个联合最初是在很久以前引入的,那时的编译器环境会有所不同。在查看 Windows 头文件时,请始终牢记历史和遗留问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)