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