位掩码为0';C中的s

位掩码为0';C中的s,c,bitmask,C,Bitmask,我需要在C中构建一个方法,该方法将返回一个int,以3个int作为参数。第一个和第二个int是起始位和结束位位置。第三个int是0或1,用于确定掩码的类型 比如说, getMask(2, 6, 1); //Set bits 2 to 6 to 1, set all others to zero 应将位2至6设置为1,将所有其他位设置为零 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 因此getMask(2

我需要在C中构建一个方法,该方法将返回一个int,以3个int作为参数。第一个和第二个int是起始位和结束位位置。第三个int是0或1,用于确定掩码的类型

比如说,

getMask(2, 6, 1); 
//Set bits 2 to 6 to 1, set all others to zero
应将位2至6设置为1,将所有其他位设置为零

0 0  0  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0
因此
getMask(2,6,1)
应该返回整数124

getMask(11,31,0)
(将位11到31设置为0)应返回2047

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1
这就是我目前拥有的:

#include <stdio.h>

int getM(int start, int end, int choice) {
    if (choice == 1){
       return ~(~0 << (end - start + 1)) << (start);
    }
    else if (choice == 0){
       return ~(~1 << (end - start + 1)) << (start);
    }
    else{
        return 0;
    }
}
#包括
int getM(int开始、int结束、int选择){
如果(选项==1){

return(~0@AnttiHaapala是正确的:
choice==0
只是相同的
start
end
choice==1
的位反运算。因此(作为一个例子):

#包括
int getM(int开始、int结束、int选择){
如果(选项==1){

返回~(~0欢迎访问该网站!查看和,以了解更多关于提问的信息,这些问题将吸引高质量的答案。您可以添加更多信息。当
choice==0
时,您会得到什么输出?您不能兼容地使用
int
,建议您使用
uint32\u t
。谢谢!我会编辑它来说明这一点,但我会这样做对于getMask(11,31,0)也就是
getMask(11,31,0)
-它不应该是
getMask(11,31,1)
-的倒数吗?也就是说,只要用
~
将返回值反转一次就可以了
#include <stdio.h>

int getM(int start, int end, int choice) {
    if (choice == 1){
       return ~(~0 << (end - start + 1)) << (start);
    }
    else if (choice == 0){
       return ~getM(start, end, 1); /* Just use what you have, but ~ it */
    }
    else{
        return 0;
    }
}

int main() {
    printf("2 6 1 %d\n", getM(2,6,1));
    printf("11 31 0 %d\n", getM(11,31,0));
}