我有一個無符號整數,我想將半字節推入它。舉例來說,如果我有一個價值1, 2, 3, 4, 5, 6, 7 & 8
啃,我希望能夠到第一四位推入我的整數,其用於:將半字節推入C中的整數堆棧
0x10000000 (268435456)
第二推後,我將有:
0x12000000 (301989888)
第三次推後,我將有:
0x12300000 (305135616)
等等。有沒有人有一個整潔和狡猾的想法,我可能會實現這一目標?解決方案需要能夠以任何數字作爲起點,並推入第一個可用的零點。因此提供int 301989888
作爲起點並按3將導致305135616
。推出從MSB
或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;
}
調用如下: 推(& X,半字節,左);
我很抱歉格式化。
你的意思是從'301989888'開始並按'3',對吧? – 2013-02-27 18:36:40
絕對正確。你認爲我可以通過這個故意作爲故意的錯誤,只是爲了看看有沒有人關注?感謝你如此鷹眼。 – headbanger 2013-02-27 20:08:57