对大整数 ULARGE_INTEGER 的一些认识
来源:互联网 发布:java解析marc数据文件 编辑:程序博客网 时间:2024/05/19 17:03
今天在使用API函数
BOOL WINAPI GetDiskFreeSpaceEx( __in LPCTSTR lpDirectoryName, __out PULARGE_INTEGER lpFreeBytesAvailable, __out PULARGE_INTEGER lpTotalNumberOfBytes, __out PULARGE_INTEGER lpTotalNumberOfFreeBytes) // 获取磁盘的总容量,可用容量等信息
时需要对 ULARGE_INTEGER 类型进行运算 。刚开始以为和int类型的应该是一样的,但是编译器一直报错才发现自己把问题想的
太理所当然了 。
通过MSDN或头文件可以知道ULARGE_INTEGER是为了存储64位数而设计的一种数据结构:
type union _ULARGE_INTEGER{
struct{
DWORD LowPart;
DWORD HighPart;
};
struct{
DWORD LowPart;
DWORD HighPart;
}U;
ULONGLONG QuadPart;
}ULARGE_INTEGER ,
*PULARGE_INTEGER;
在32位机中可以使用前面两种struct结构体,它用两个DWORD类型来存储64位数,LowPart存储低32位,HighPart存储高32位。
支持64位的可以直接使用第3种(QuadPart)。下面是对该类型进行运算的一些不成熟想法:
由于该数据结构没有定义(重载?)操作符,所以一些常用的运算法则不能直接拿来使用。当需要对其进行运算时 ,可以从二进制的
思路来进行。假设 ULARGE_INTEGER uLargeInt;int num1;(以除法为例)
首先对低32位进行运算: uLargeInt.LowPart /num1;
然后对高32位进行运算: uLargeInt.HighPart *((2^32)/num1);
最后把高低位运算得到的结果相加 得出最后结果。(注意,运算成功与否取决于每一步运算的结果是否溢出。)
- 对大整数 ULARGE_INTEGER 的一些认识
- 对一些外国人的认识
- 对自已的一些认识
- 对DataReader的一些认识
- 对存储的一些认识
- 对世界的一些认识
- 对编程的一些认识
- 对“自学”的一些认识
- 对总线的一些认识
- 对java的一些认识
- 对计算机网络的一些认识
- 对经济的一些认识
- 对递归的一些认识
- 对serlvet的一些认识
- 关于ULARGE_INTEGER的运算!
- ULARGE_INTEGER
- 对8086的总线的一些认识
- 对前端的一些粗浅的认识
- unix text editor vi
- 开博帖,新生赛の五场总结
- .......
- c#中的virtual/override/abstract
- PPT制作技巧
- 对大整数 ULARGE_INTEGER 的一些认识
- Spring(基础)学习文档二
- CListctrl的基本用法总结
- Android图形解码(从应用到skia)
- 通信词典
- 用一行代码让w3wp进程崩溃,如何查找w3wp进程崩溃的原因
- 简单的自动更新程序实现
- 轻松建立Silverlight开发环境
- "害怕"源于无知