Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 逐位运算和检查整数的第n位_C_Bitwise Operators - Fatal编程技术网

C 逐位运算和检查整数的第n位

C 逐位运算和检查整数的第n位,c,bitwise-operators,C,Bitwise Operators,以下主要节目: #include <stdio.h> 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

以下主要节目:

#include <stdio.h>
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;
}
#包括
无效设置标志(int*标志持有人,int标志位置);
内部检查标志(内部标志固定器、内部标志位置);
int main(int argc,char*argv[])
{
int flag_holder=0;
int i;
设置标志(&标志架,3);
设置标志(&标志架,16);
设置标志(&标志架,31);
对于(i=31;i>=0;i--)
{
printf(“%d”,勾选旗帜(旗帜持有人,i));
如果(i%4==0)
{
printf(“”);
}
}
printf(“\n”);
返回0;
}
为set_flag和check_flag的定义编写代码,以便程序的输出 如下所示: 您可以将set\u标志函数视为取整数并确保第n位为1。检查标志 函数只返回一个整数,该整数在第n位为零时为零,在第n位为1时为1。你可能会发现这种变化

输出应该是

1000 000 000 000 000 000 000 000 000 000 000

我不明白问题的大胆部分


谁能给我解释一下这个问题吗。所以我应该检查整数的第n位。但是,初始整数为0。表示没有第n位的值为1。那么我应该在这里做什么呢?

它们的意思是
set\u flag
函数修改它的第一个参数所指向的值,从而设置(n+1)第位。

通过“确保”,它们不是指确认。他们意味着改变事情,使其成为现实。而且,奇怪的是,它们并不意味着第n位。他们显然打算
设置位(&flag\u holder,3)设置第四位。所以我应该将第n位更改为1。然后返回该二进制值的整数?不,该函数不返回任何内容。您应该修改第一个参数指向的值。(奇怪的是,这是你应该设置的第(n+1)位。)
set\u位
不返回任何东西(void),所以只要设置它就可以了。是的,这就是我的意思,很抱歉,那么我该如何准确地更改整数的第n位呢?在本例中,如何将整数的第n位设置为1或0。可以通过将整数的单个位与仅设置该位的另一个整数进行ORing来设置该位。(提示:
1so如果我这样做,*flag_holder |=1n+1位,如果你从1开始计算位的位置,那会怎么样?但它们显然是从0开始计算的。@Ben IMO,如果你从零开始,它就不算了。这就是为什么从1开始的数字被称为“计数数字”。如果你在计数,一是第一位的。