我正在学习位操作,然后我想到了这一点。假设我有两个数字,第一个在[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