我正在学习 C,我仍然是一个非常初学者。
我的问题如下。我有一个 unsigned int x 和一个 unsigned int y。我想将 n 位从位置 p 从 x 复制到 y 上的相同位置。我发现了一些类似的问题,但在 C 语言中没有,而且大多数情况下,如果使用最右边或最左边的位,问题会略有不同。我还想找到一个不依赖于机器上整数表示的解决方案。
这是我所做的
unsigned fix_bits(unsigned x, unsigned y, int n, int p)
{
unsigned u1,u2,u3,u4,x1,y1,yf;
u1 = ~0; /*vector of 1*/
u2 = (u1>>n); /*0 from 0 to n-1 and 1s*/
u3 = ~(u2);/*1 from 0 to n-1 and 0s*/
u4 = u3>>p;/*0 from 0 to p-1, n 1 from p to p+n+1 and 0s*/
x1 = (x & u4);/*only keep n bits of x from position p*/
y1 = (y | u4);/*set y bit from p to (p+n+1) to 1, rest remains unchanged (0 | bit = bit)*/
yf = (x1 | y1);
return yf;
}
但它不起作用:
在 28 到 32 的位置 3 放置 2 位的结果是 402653216
有人知道我在做什么错吗?
非常感谢