我是新来的,但对我的计算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_flag
和check_flag
,并且应该显示:
1000 0000 0000 0001 0000 0000 0000 1000
现在我真的很难理解这一点。 flag_holder
是否应该在整个时间内等于0?我的教授说使用按位而不是乘法。但看起来我可以实现一个32� 0的数组,并将第3,第16和第31个元素设置为0?我提前为这个凌乱的设置道歉,感谢任何真正阅读过这个并帮助的人!
答案 0 :(得分:0)
让我告诉你乘法和按位之间的相似性
左移&右移主要用于设置标志2 = 0010
当你把狗屎2拉1时,所有的位都被移到左边并且附加零。
0010 << 1
0100
,结果将是
0100 = 4
并进一步向左移动0100
至1000 = 8
左移类似于乘以2 右移类似于除以2
设置标记
set_flag(&flag_holder, 3);
该功能或多或少会像这样
void set_flag( int *flag_holder, int shifter) {
*flag_holder = *flag_holder | 1 << shifter;
}
这将做的是设置第3位而不影响任何其他位