LARGE INTEGER 大整數結構體的解析

2021-08-16 20:01:20 字數 796 閱讀 1728

在「winnt.h」檔案中定義了乙個結構體large_integer,十分巧妙

#if defined(midl_pass)

typedef struct _large_integer dummystructname;

struct 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;  

理解 LARGE INTEGER的定義

if defined midl pass typedef struct large integer struct u endif midl pass longlong quadpart large integer 怎麼理解這個定義 if defined midl pass typedef struc...

C 大整數除法 大整數乘法

l1 046.整除光棍 這裡所謂的 光棍 並不是指單身汪啦 說的是全部由1組成的數字,比如1 11 111 1111等。傳說任何乙個光棍都能被乙個不以5結尾的奇數整除。比如,111111就可以被13整除。現在,你的程式要讀入乙個整數x,這個整數一定是奇數並且不以5結尾。然後,經過計算,輸出兩個數字 ...

大整數相加和大整數相乘

大整數運算是我們經常會碰到的演算法面試題之一。大整數運算往往會導致整形溢位而不能在ide直接通過四則運算執行。下面是python3寫的大整數相乘和大整數相加函式。原理都較為相似,模擬手寫演算的場景從後往前計算並且考慮進製。def multy n1,n2 n1 str n1 1 n2 str n2 1...