按位运算符

时间:2016-10-05 04:18:17

标签: c bitwise-operators

我是新来的,但对我的计算2硬件有一些疑问。

鉴于主要功能:

void set_flag(int* flag_holder, int flag_position);
int check_flag(int flag_holder, int flag_position);

int main(int argc, char* argv[])
{
    int flag_holder = 0;
    int i;
    set_flag(&flag_holder, 3);
    set_flag(&flag_holder, 16);
    set_flag(&flag_holder, 31);
    for(i = 31; i >= 0; i--) {
        printf("%d", check_flag(flag_holder, i));
        if(i % 4 == 0)
            printf(" ");
    }
    printf("\n");
    return 0;
}

我们应该完成set_flagcheck_flag,并且应该显示:

1000 0000 0000 0001 0000 0000 0000 1000

现在我真的很难理解这一点。 flag_holder是否应该在整个时间内等于0?我的教授说使用按位而不是乘法。但看起来我可以实现一个32� 0的数组,并将第3,第16和第31个元素设置为0?我提前为这个凌乱的设置道歉,感谢任何真正阅读过这个并帮助的人!

1 个答案:

答案 0 :(得分:0)

让我告诉你乘法和按位之间的相似性

左移&右移主要用于设置标志

2 = 0010 

当你把狗屎2拉1时,所有的位都被移到左边并且附加零。

0010 << 1 
0100 

,结果将是

0100 = 4 

并进一步向左移动01001000 = 8

左移类似于乘以2 右移类似于除以2

设置标记

set_flag(&flag_holder, 3);

该功能或多或少会像这样

void set_flag( int *flag_holder, int shifter) {
*flag_holder = *flag_holder | 1 << shifter;
}

这将做的是设置第3位而不影响任何其他位