在帶32位編譯器的32位處理器上我想使用每個有符號和無符號整數中的一個構成64位有符號整數。不使用任何預定義的宏或類型。如何在32位處理器上使用一個有符號整數和一個無符號整數製作帶符號的64位整數
3
A
回答
0
32位編譯器將爲您處理64位數字。所以它不太可能你真的需要這個。但我會咬人。表面上這是一個非常簡單的問題。
#include <stdint.h>
static inline int64_t make_int64(uint32_t low, int32_t high) {
return (int64_t)((uint64_t)high << 32) | low;
}
static inline void split_int64(int64_t value, uint32_t *low, int32_t *high) {
*low = value & 0xFFFFFFFF;
*high = (int32_t)((uint32_t)(value >> 32));
}
但它總是棘手/危險的混合有符號和無符號整數。手動構建int也需要您瞭解處理器如何格式化它們。我們假設它的2s恭維小端。
如果您完整地描述了您的要求,這將會很有幫助。例如上面的例子make_int64(0,-1)= -4294967296,但是make_int64(1,-1)= -4294967295。
+0
如何使用這種方案編碼'-1'?和'+ 1'? –
+0
我爲你添加了一個匹配的編碼器@JonathanLeffler。我所做的只是把64位分成兩半。我正在做的唯一奇怪的事情是使用強制轉換來防止CPU擴展符號。當然這隻適用於存儲/檢索。如果他想以某種方式操縱split int,他不得不擔心endian問題等。 – Richard
相關問題
- 1. C++:在一個有符號的64位整數中的兩個無符號64位整數的差異
- 2. 無符號16位和64位整數
- 3. 算法使用32位無符號整數乘64位數
- 4. 帶符號和無符號整數的位操作問題,XNOR
- 5. Javascript中的無符號32位整數
- 6. Powershell,如何聲明一個無符號的32位整數?
- 7. 位移爲32個64的無符號整數
- 8. 64位有符號整數有多大?
- 9. pymongo 64位無符號整數
- 10. Clojure無符號64位整數
- 11. 無符號整數位字段移產量符號整數
- 12. 5位有符號整數?
- 13. HDF5寫出32位無符號整數到磁盤上的64位,並讀入32位無符號int
- 14. 按位不是有符號整數和無符號整數在C
- 15. 有符號和無符號整數?
- 16. 在一個無符號的32位整數中查找位的位置
- 17. 用兩個無符號的16位整數表示一個無符號的32位值
- 18. 兩個32位有符號整數使用SSE2相乘
- 19. 有符號整數的按位操作
- 20. 從無符號整數計數位
- 21. 無符號和符號整數
- 22. 64位無符號整數是否會在32位系統上回繞?
- 23. 「帶符號和無符號整數表達式之間的比較」只帶有無符號整數
- 24. 無符號整數
- 25. 薩姆的兩個64位無符號整數QtSpim
- 26. 將n位整數從無符號轉換爲有符號
- 27. 在iOS和OSX上無符號整數和無符號長整數編譯NSLog
- 28. 無符號整數的反向位
- 29. 存儲在一個無符號的16位整數的RGB
- 30. 32位無符號整數的2位右移
你在C中實現編譯器嗎?你有沒有'很久'? –
使用'int64_t'和'' –
BLUEPIXY
順便說一下,你在做什麼?你正在創建一個編譯器嗎?你正在創建一個Linux設備驅動程序?這與內存對齊有什麼關係?還是Arch Linux發行版?不要使用與您的問題無關的標籤發送垃圾郵件。 –