逐位连接

时间:2014-07-30 09:44:52

标签: c bit-manipulation bit

我有一个C代码,其中我有几个SFR类型的变量[R / W 1.8]。现在我甚至都不知道这种类型是什么。但我知道这存储了一下。 所以假设有变量:     A = 1     B = 0     C = 1     D = 0

现在我想将它们连接起来,将它们变成一个整数。

D C B A = 0 1 0 1 = 5

我想要这样的东西。如何在C中实现这一目标?

谢谢

4 个答案:

答案 0 :(得分:4)

您可以使用位移。所以要么像这样:

int answer = 0;
answer = D;
answer = (answer << 1) | C;
answer = (answer << 1) | B;
answer = (answer << 1) | A;

或:

int answer = (D << 3) | (C << 2) | (B << 1) | A;

答案 1 :(得分:0)

我不知道你的意思,但也许你想要这个。

unsigned A = 1, B = 0, C = 1, D = 0;
unsigned result = 0;

result |= D;
result <<= 1;
result |= C;
result <<= 1;
result |= B;
result <<= 1;
result |= A;

(live example)

答案 2 :(得分:0)

试试这个: (D << 3) | (C << 2) | (B << 1) | A

答案 3 :(得分:0)

由于您不知道什么类型的数据类型&#34; SFR&#34;,因此位操作可能无法在此数据类型上运行。此外,您可能需要SFR的方法,可以比较为零。 (超载或其他)。

unsigned answer = 0;
SFR zero = 0;
if (D != zero) {
    answer |= 1;
}
answer <<= 1;
if (C != zero) {
    answer |= 1;
}
answer <<= 1;
if (B != zero) {
    answer |= 1;
}
answer <<= 1;
if (A != zero) {
    answer |= 1;
}