LARGE_INTEGER 大整数结构体的解析「建议收藏」

LARGE_INTEGER 大整数结构体的解析「建议收藏」在“WinNT.h”文件中定义了一个结构体LARGE_INTEGER,十分巧妙#ifdefined(MIDL_PASS)typedefstruct_LARGE_INTEGER{#else//MIDL_PASStypedefunion_LARGE_INTEGER{  struct{    DWORDLowPart;    LONGHighPart;  …

大家好,又见面了,我是你们的朋友全栈君。

在“WinNT.h”文件中定义了一个结构体LARGE_INTEGER,十分巧妙

#if defined(MIDL_PASS)
typedef struct _LARGE_INTEGER {

#else // MIDL_PASS
typedef union _LARGE_INTEGER {

    struct {

        DWORD LowPart;
        LONG HighPart;
    } DUMMYSTRUCTNAME;
    struct {

        DWORD LowPart;
        LONG HighPart;
    } u;
#endif //MIDL_PASS
    LONGLONG QuadPart;

} LARGE_INTEGER;

解释:根据预编译指令若定义宏MIDL_PASS,则将 结构体命名为LARGE_INTEGER,若未定义宏MIDL_PASS,则将联合体命名为LARGE_INTEGER。实际上如果编译器具有内置支持64位整数,使用QuadPart成员中存储的64位整数。否则,使用LowPart和HighPart成员的存储的64位整数。

在不支持内置64位情况下,即,采用联合体结构。联合体有两部分组成,DUMMYSTRUCTNAME 和 u:因为联合的长度取决于最长的数据成员的长度,相当于成员公用内存。

(1)在小端的情况下,因为低32位数字在前,高32位在后。

如果将这个64位大整数赋值0x1234:

LARGE_INTEGER data;  
data.LowPart = 0x34;  
data.HighPart = 0x12;  

(2)在大端的情况下,高32位数字在前,低32位在后。

如果将这个64位大整数赋值0x1234:

LARGE_INTEGER data;  
data.u.LowPart = 0x34;  
data.u.HighPart = 0x12;  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160109.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SIMD and Avx2

    SIMD and Avx2SIMD一条指令可以执行多个数据group的计算和输出。对于SIMD相对应的SISD.intel SSE2 ,AVX2,AVX-512假设有一个任务是统计字符串中每一个字符出现的次数,我们可以用128bit的SISD指令进行统计。每8个bit代表一个字符,所以只需要两个SIMD指令(movemask、popcount)。详细测试:#include<stdio.h>#include<thread>#defineINC_TO1000000//o

    2022年5月7日
    29
  • webstrom激活码2021_最新在线免费激活

    (webstrom激活码2021)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlb…

    2022年3月25日
    61
  • hashmap动态扩容死循环_HashMap扩容

    hashmap动态扩容死循环_HashMap扩容HashMap扩容死循环问题源码分析问题(jdk1.7)一、首先hashmap单线程正常扩容遍历每个数组,依次遍历每个数组的链表,根据头插法由原来的1,2,3变为了3,2,1二、hashmap多线程扩容死循环问题两个线程e1,e2此时线程一先执行,但线程二的指向发生改变,改为线程变换后的具体存储;初始的e2指向0号位的1,但经过线程一的变换指向了2号位的1了,next也发生改变线程二开始在线程一的基础存储,当next2指向空时。e.next=newTable[i],也就

    2022年9月21日
    1
  • 做java开发的前景何在

    做java开发的前景何在做了几年的it研发工程师,到现在还从事coding,尤其我本身是女生,工作也有5年多了,一直从事coding,用过很多的开发语言,但是好像没有精通。所以找工作不知道该用哪种语言找,于是乎瞎碰,没有目标的乱碰。呵呵。曲折的工作经历,中间休息了两年没有开发,搞了半年的需求分析,后来由于不喜欢新的工作环境离职,现在又走上了老路coding,本身我觉得没有什么,但是在现在的公司里越来越觉得做研发尤其是…

    2022年7月14日
    13
  • 【显卡】rx470显卡挖矿算力,rx470挖矿算力,rx470显卡挖矿超频设置

    【显卡】rx470显卡挖矿算力,rx470挖矿算力,rx470显卡挖矿超频设置已下是RX470显卡挖矿算力参数RX470,8卡矿机,算力是216m,功耗1110w,日产量ETH单位0.00636909

    2022年6月14日
    36
  • 使用phpmaill发送邮件的例子

    使用phpmaill发送邮件的例子

    2021年9月20日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号