Tag: 位操纵

K&R练习2-7中的位反转function

C编程语言的练习2-7: 写一个函数invert(x,p,n) ,返回x ,其中n位从位置p开始反转(即1变为0,反之亦然),其他不变。 我理解这样的问题:我有182这是二进制的101(101)10 ,括号中的部分必须反转而不改变其余部分。 返回值应为10101010 ,即十进制为170。 这是我的尝试: #include unsigned int getbits(unsigned int bitfield, int pos, int num); unsigned int invert(unsigned int bitfield, int pos, int num); int main(void) { printf(“%d\n”, invert(182, 4, 3)); return 0; } /* getbits: get num bits from position pos */ unsigned int getbits(unsigned int bitfield, int pos, int […]

是否可以检查2组3个中的任何一组是否等于9个比较中的任何一组?

int eq3(int a, int b, int c, int d, int e, int f){ return a == d || a == e || a == f || b == d || b == e || b == f || c == d || c == e || c == f; } 如果3个第一个int中的任何一个等于3个最后一个int中的任何一个,则此函数接收6个int并返回true。 是否有任何类似的方式使其更快?

如何使用C判断数字的二进制表示中是否有1?

已经存在关于计算一个数中有多少1 s的问题,但这个问题是关于判断是否存在偶数或奇数的1。 不允许任何循环或条件(包括switch)语句。 此外,应避免使用除法,乘法或模数运算符。 更具体地说,我们可以假设它是一个32位无符号整数。 实际上我已经有了一个实现,但我无法弄清楚它的工作原因。 任何certificate其正确性或任何新想法都会非常有帮助。 int even_ones(unsigned x) { x ^= x>>16; x ^= x>>8; x ^= x>>4; x ^= x>>2; x ^= x>>1; return !(x & 1); }

在c二进制文件中,测试以查看数字是否在范围内

这是我无法弄清楚的谜题的一部分。 该function包含三个输入。 第一个是int,第二个是下限,第三个是上限。 我需要测试以查看第一个数字是否在包含的下限和上限之内。 如果它在范围内则返回1,否则返回0.捕获是我只能使用 ! ~ & ^ | + <> 操作,并且只有20个的组合。此外,只能使用int变量,而不能使用if语句,循环或函数调用。 Range(int x, int lower, int upper){ //… some code here return retVal; } 显然我理解这里的逻辑。 如果((x> = lower)&&(x <= upper))返回1; 唯一的问题是我不能使用if语句,,==或&&。