我正在學習位操作,然後我想到了這一點。假設我有兩個數字,第一個在[1,6]的範圍內,第二個在[0,3]的範圍內。現在第一個數字可以存儲最多3位數據,第二個數據可以存儲2位數據。我怎樣才能使用一個int32來存儲它們。謝謝。如何使用位操作在一個整數中編碼和解碼兩個數字?
回答
會做到這一點。
second_number
然後佔用兩個最低有效位,你可以用composite & 3
提取它。
first_number
佔據了三位,即「左」,你可以用composite >> 2
提取它。
感謝您的回答。可以編碼兩個以上的數字嗎? –
當然可以。您只需使用更多的按位運算符進行提取。 @nglee的答案更容易概括。 – Bathsheba
編碼:
// a : range of [1,6], bit0 ~ bit2
// b : range of [0,3], bit3 ~ bit4
// c : encoded int32
c = 0;
c |= (a | b << 3);
解碼:
a = (c & 0x00000007);
b = (c & 0x00000018) >> 3;
如果你只需要打包成一個INT兩個數字,而不是位操作你可能想使用bit fields。這樣你就可以在一個int字段的空間中存儲兩個字段並通過名稱訪問它們。
我想通過網絡發送數據,它必須是int。我在這裏有一些限制。謝謝。 –
@Ankitsinghkushwah它可以採取完全大小的int值存儲,只是要小心簽署/無符號。你可以在這裏檢查它:http://cpp.sh/6q73k也許它會幫助你另一次:) – Michael232
請注意,位域的佈局是特定於實現的。不要求包含兩個小字段的結構必須適合'int'。這通常是完成的,但不能保證。 –
- 1. 如何在一個整數中編碼兩個數字?
- 2. 如何將三個0-255整數編碼/解碼爲一個數字?
- 3. 如何解碼一個9位整數到一些隨機的4位數字
- 4. 如何在Python中加速json解碼和編碼操作?
- 5. 彙編代碼添加兩個整數
- 6. 如何解碼編碼爲一個* 100 +兩個* 10 +三的值?
- 7. 如何在Python中編碼和解碼PER編碼的數據?
- 8. 按位操作添加兩個數字?
- 9. 如何在同一代碼中使用字符串和整數?
- 10. 如何製作一個簡單的編碼器和解碼器?
- 11. 使用Oracle解碼的兩個參數
- 12. 使用NSCoding在Swift 3中編碼和解碼函數如何工作?
- 13. 將兩個整數合併爲一個並稍後解碼
- 14. 將一個整數中的兩位數字加在一起VB.net
- 15. 如何在一個數字中添加兩個整數
- 16. 編碼整個位置.href字符串
- 17. 用位操作添加2個整數
- 18. 使用Base64編碼和解碼的問題,其中一個!= B
- 19. 如何解碼一個16位ASCII數據爲一個整數,當你在Python中使用結構模塊中的2個字符的字符串?
- 20. 位向量建立一個字節數組 - 瞭解位操作
- 21. 編碼一個C類型的整數
- 22. 我如何編碼32位整數到字節數組?
- 23. 數據編碼和解碼
- 24. 如何調整代碼以使用兩個參數而不是一個?
- 25. 如何使用C#編碼和解碼'中文'字符
- 26. 操作碼和操作數是如何定義在CPU中的?
- 27. 如何解壓使用結構6個字節作爲一個整數Python中
- 28. 在32位整數中對4個值進行編碼
- 29. 位操作:獲取一個數字中的單個位
- 30. Java位掩碼編碼差異大小的多個整數
您也可能有興趣看[bit feilds](http://en.cppreference.com/w/cpp/language/bit_field) – NathanOliver