2011-08-11 46 views
4

我想將兩個32位值存儲在一個long int變量中。你如何在使用C的32位操作系統上執行此操作?是否有可能將數據存儲在一個單獨的long long變量中?如果是這樣,那是怎麼做的?如何在一個long int變量中存儲2個32位值?可能嗎?

+3

你爲什麼不使用兩個32位整數的結構? – SirDarius

+1

你爲什麼要這樣做? –

+0

代碼已經存在,所以我只是想知道64位的數據可以存儲在一個單一的長整型變量或不 – Syedsma

回答

1

假設長是你的平臺上爲64位,

int v1 = 123; 
int v2 = 456; 
long val = v1 << 32 | v2; 
+1

長中找到,可能只有32位。然後val == v2 –

+0

「假設您的平臺上的長度爲64位」。如果你正在64位編譯器上運行一個64位的盒子,一個長的是64位。 – Kevin

+1

「警告:左移計數> =類型寬度」 - 您需要在某個地方投射。還可以用'v2 = -1'試試看它爆炸...... – user786653

8

使用的uint64_t中和位運算符。

uint64_t i64; 
uint32_t a32, b32; 

// Be carefull when shifting the a32. 
// It must be converted to a 64 bit value or you will loose the bits 
// during the shift. 
i64 = ((uint64_t)a32 << 32) | b32; 
+0

後我可以存儲在長整型變量 – Syedsma

+0

@Syedsma I64我認爲你可以將其存儲在一個無符號'長long'。 – cnicutar

+1

@Martin謝謝!我總是忘記:-)我把劇組改成了C組。 – cnicutar

0

除非sizeof(long int) == 8,答案是否定的。如果這種平等是真的,那麼使用凱文或cnicutar的答案。

+1

不完全正確。該標準允許'INT_MIN'爲-32767和'INT_MAX'爲32767.所以真正需要的是用於存儲結果的類型至少是操作數大小的兩倍(原始值)。 – jweyrich

+0

@jweyrich:我知道標準允許一個int大小爲16位。然而,他問他是否可以將兩個32位數字合併成長整數。如果long int長度爲4個字節,那將是相當困難的。此外,long int必須大於或等於int的大小。 –

+0

我的觀點是,你的答案是假設'int'是32位,可能並非如此。 – jweyrich

相關問題