gpt4 book ai didi

c - 按位运算符

转载 作者:行者123 更新时间:2023-11-30 19:37:26 26 4
gpt4 key购买 nike

我是新来的,但对我的计算 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?对于困惑的设置,我提前表示歉意,并感谢所有真正阅读本文并提供帮助的人!

最佳答案

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

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

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;
}

这将设置第三位而不影响任何其他位

关于c - 按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39865360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com