在Linux內核中,我們如何操作u64類型的32位高階和32位低階。我試過這個,但編譯器報告了很多警告。在Linux中操縱u64類型
#define HI_BYTES(_a) (_a & 0xffffffff00000000)
#define LO_BYTES(_a) (_a & 0x00000000ffffffff)
/* _v is 32 bit value */
#define HI_BYTES_SET(_a, _v) do {_a = (_a & 0x00000000ffffffff) | (_v << 32)} while (0)
#define LO_BYTES_SET(_a, _v) do {_a = (_a & 0xffffffff00000000) | (_v)} while (0)
任何建議表示讚賞。非常感謝!
警告說什麼? – 2011-04-19 08:31:28
u64?也許你的意思是uint64_t?你真的需要混淆宏而不是粘在一個小的內聯函數中,讓編譯器完成它的工作嗎? – 2011-04-19 08:33:58
它抱怨移位量和恆定值0xffffffff00000000太大。感謝大家花時間回答: – 2011-04-19 14:52:37