私はCを学んでいて、まだ初心者です。
私の問題は次のとおりです。1 つの unsigned int x と 1 つの unsigned int y があります。xの位置pからnビットを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 です。
誰かが私が間違っていることを知っていますか?
どうもありがとうございました