我有一个无符号整数,我想将半字节推入它。举例来说,如果我有一个价值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