我正在學習位操作,然後我想到了這一點。假設我有兩個數字,第一個在[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. 如何在Python中加速json解碼和編碼操作?
- 3. 如何解碼編碼爲一個* 100 +兩個* 10 +三的值?
- 4. 如何在Python中編碼和解碼PER編碼的數據?
- 5. 使用NSCoding在Swift 3中編碼和解碼函數如何工作?
- 6. 用位操作添加2個整數
- 7. 位向量建立一個字節數組 - 瞭解位操作
- 8. 如何解碼一個16位ASCII數據爲一個整數,當你在Python中使用結構模塊中的2個字符的字符串?
- 9. 編碼一個C類型的整數
- 10. 我如何編碼32位整數到字節數組?
- 11. 操作碼和操作數是如何定義在CPU中的?
- 12. 如何使用C#編碼和解碼'中文'字符
- 13. 位操作:獲取一個數字中的單個位
- 14. 在32位整數中對4個值進行編碼
- 15. Java位掩碼編碼差異大小的多個整數
- 16. Brainfuck中的兩個一位數字相乘的代碼
- 17. 編碼,將整數解碼爲字符數組
- 18. 在一個數字中添加數字(需要解釋代碼)
- 19. 在Perl中解碼3字節整數
- 20. 如何在php中編碼和解碼多維數組?
- 21. 從一位數的整數中創建一個兩位數的字符串
- 22. 在整個數據庫中搜索一個亂碼字符「Oracle」
- 23. 如何將一個整數分解爲一個整數數組
- 24. 這個整數編碼是如何工作的?
- 25. 連接兩個數字位不工作的代碼
- 26. 創建一個使用4位編碼表示整數的文件0 -9
- 27. 如何在彙編語言中添加兩個16位數字?
- 28. 如何在ASP MVC編碼一個完整的URL字符串
- 29. 如何使用Perl編碼和解碼「急性重音字符」
- 30. 瞭解如何編碼一個文件
您也可能有興趣看[bit feilds](http://en.cppreference.com/w/cpp/language/bit_field) – NathanOliver