组合位域

时间:2012-10-01 18:51:24

标签: objective-c bit-manipulation

我很难理解如何以正确的顺序获取这些位

我的目标:

给出以下输入

char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111

如何获得以下输出

char result = ?; //in binary 0010 1111 (id somethingElse)

2 个答案:

答案 0 :(得分:1)

char id = 0x02; //in binary => 0010
char somethingElse = 0xF; //in binary => 1111

char result = (id<<4) | somethingElse;

答案 1 :(得分:0)

我会使用更简单的移位操作,除非这些位经常被独立修改(比如某些格式规范的标题中的位)。在这种情况下,我将使用union和bit字段的组合。这是一个执行此操作的小程序

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        union {
            struct {
                unsigned char id:4;
                unsigned char somethingElse:4;
            } split;
            unsigned char combined;
        } value;

        value.split.id = 0x02;
        value.split.somethingElse = 0xF;

        NSLog(@"%02X", value.combined); // Outputs F2
    }
    return 0;
}

如果这不是你想要的顺序,你可能想要反转id和somethingElse的顺序。