符号なし整数があり、それにニブルをプッシュしたいと考えています。たとえば、値1, 2, 3, 4, 5, 6, 7 & 8
のニブルがある場合、最初のニブルを整数にプッシュして作成できるようにしたいと考えています。
0x10000000 (268435456)
2回目のプッシュの後、次のようになります。
0x12000000 (301989888)
3回目のプッシュの後、次のようになります。
0x12300000 (305135616)
などなど。どうすればこれを達成できるかについて、きちんとした狡猾なアイデアを持っている人はいますか? 解は、開始点として任意の数値を与え、最初に使用可能なゼロにプッシュできる必要があります。したがって、開始点として intを指定301989888
して 3 を押すと、結果は になり305135616
ます。MSB
orからのプッシュLSB
も同様に便利です。
謝罪いたします。試験問題のようです。そうではありません - 私はただ実験を試みたいのですが、始める前に立ち往生しています!
チェックされた答えは完璧です!次のように少し変更しました (自己完結型にするため)。
#define left 0
#define right 1
void push(unsigned* number, int nibble,int direction){
int i, shift;
if (direction){
for (i = 28; i >= 0; i -= 4){
if (!(*number & (0xfU << i)))
shift = i;
}
}
else{
for (i = 0; i <= 28; i += 4){
if (!(*number & (0xfU << i)))
shift = i;
}
}
*number|=nibble<<shift;
}
次のように呼び出されます: push(&x,nibble,left);
フォーマットについてお詫び申し上げます。