gpt4 book ai didi

c - 优化 C 中的按位运算

转载 作者:太空狗 更新时间:2023-10-29 17:01:46 25 4
gpt4 key购买 nike

我遇到了一个问题:“练习 2-6。编写一个函数 setbits(x,p,n,y) 返回 x,其中 n 位从位置 p 设置为 y 最右边的 n 位,其他位不变。"

我已经为此编写了一个函数,如下所示。这按预期工作。

int func_setx(int x,int p,int n,int y)
{
int a_t= ~0 << (p+n);
int b_t= ~a_t >> n;
int x_t= x& (a_t | b_t); // a temporary x which has the bits to be changed as 0 , rest of the bits unchanged.

int mask= (y << p) & (~(~0 << (p+n))); // a mask which has required bits from y in positions to be set , rest all bits 0.

printf("\nCheckpoint : mask= %x x_t= %x\n",mask,x_t);

int result= mask|x_t;
return result;
}

但是不知怎么感觉逻辑比较长,可以优化,但是暂时想不出其他的办法。有人可以对此提出任何优化建议吗?

最佳答案

制作一个n位掩码:

mask_y = (1U << n) - 1;

p 位开始:

mask_x = mask_y << p;

清除 x 中的相应位:

x &= ~mask_x;

y 中提取位:

y &= mask_y;

将它们上移到位置 p:

y <<= p;

放在一起:

result = x | y;

或者更紧凑的形式:

mask = (1U << n) - 1;
result = x & ~(mask << p);
result |= (y & mask) << p;

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

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