如何确定位序列是正还是负

时间:2012-09-26 04:01:24

标签: c# c++ c algorithm bit-manipulation

我有两组值。每个都在-15到+15的范围内,包括0。

我设法用8位表示两个数字。这些位中的4位可能属于负值,另外4位属于正值。

每当我读取该位序列时,我希望能够确定最初的4位是+还是 - 。

有没有办法使用按位运算来完成打包和解包?还是另一种聪明的方式?

提前感谢。

更新:这里有一些我想要实现的样本:

在31个值中,我需要使用8位代表两个,例如我有数字14+和15+。它们既可以是正面的,也可以是其中之一,但它们不能同时为负面。所以14 = 1110和15 = 1111(全部为0); bitsequence = 11101111 因此,当解包时我知道字节239 = 11101111,实际上通过解析比特序列分别表示数字14+和15+。但是,当其中一个数字为负数时,我很难过。

2 个答案:

答案 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,结果为非零,那么您的数字为负数。

解决问题的另一种方法是使用您的语言为字节值提供的任何方法。然后,您不需要做任何聪明的事情,只需测试该值是否小于零。