对大整数 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);
最后把高低位运算得到的结果相加 得出最后结果。(注意,运算成功与否取决于每一步运算的结果是否溢出。)     
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网购火车票丢了怎么办 改签没有票了怎么办 火车票取了没赶上车怎么办 上车后车票丢了怎么办 晒了吗任务过期怎么办 坐火车买了站票怎么办 坐火车忘记带票怎么办 距离二本线差几分怎么办 行李包落火车候车厅怎么办 高铁票买错地点怎么办 高铁票买错日期怎么办 票买错时间了怎么办 上高铁了票丢了怎么办 上车前高铁票丢了怎么办 高铁安检没收的东西怎么办 高铁安检员老了怎么办 高铁安检喷雾拍照了怎么办 十个小时的高铁怎么办 华为开机需要激活码怎么办 高铁提前上车了出站怎么办 买火车票忘记带身份证怎么办 买高铁票没赶上怎么办 电脑放视频没有声音怎么办 内业计算中角度超限怎么办 遇到飞机出故障乘客怎么办 模拟城市5矿产满了怎么办 模拟城市5劳工短缺怎么办 模拟城市5土地价值低怎么办 考上研究生想二战研究生学籍怎么办 小米3屏幕花屏怎么办 狗被城管抓了怎么办 隔壁家的狗扰民怎么办 遛狗碰到碰瓷老太太怎么办 碰到保安碰瓷的人怎么办 碰到碰瓷的车怎么办 商品房楼上邻居违规装修怎么办 遇到不讲道理的邻居怎么办 邻居告我我该怎么办 丈夫判刑十年回来妻子怎么办 有人发色情信息给妻子怎么办 小孩拉蛋花样便怎么办