我有两组值。每个都在-15到+15的范围内,包括0。
我设法用8位表示两个数字。这些位中的4位可能属于负值,另外4位属于正值。
每当我读取该位序列时,我希望能够确定最初的4位是+还是 - 。
有没有办法使用按位运算来完成打包和解包?还是另一种聪明的方式?
提前感谢。
更新:这里有一些我想要实现的样本:
在31个值中,我需要使用8位代表两个,例如我有数字14+和15+。它们既可以是正面的,也可以是其中之一,但它们不能同时为负面。所以14 = 1110和15 = 1111(全部为0); bitsequence = 11101111 因此,当解包时我知道字节239 = 11101111,实际上通过解析比特序列分别表示数字14+和15+。但是,当其中一个数字为负数时,我很难过。
答案 0 :(得分:4)
您可以使用位域轻松完成此操作:
struct two_numbers
{
signed char first : 4;
signed char second : 4;
};
然后你可以像正常一样比较零:
two_numbers t = { 7, -5 };
if (t.first < 0 || t.second < 0) { ... }
但请注意,4位字段仅允许从-8到7,而不是-15或15的值。
答案 1 :(得分:0)
假设您使用的是8位示例,其中使用高位表示负数,使用低位表示正数。如果您将数字掩盖为0xF0,结果为非零,那么您的数字为负数。
解决问题的另一种方法是使用您的语言为字节值提供的任何方法。然后,您不需要做任何聪明的事情,只需测试该值是否小于零。