我有一个无符号整数,我想将半字节推入其中。例如,如果我有带有 values 的半字节1, 2, 3, 4, 5, 6, 7 & 8
,我希望能够将第一个半字节推入我的整数中以生成:
0x10000000 (268435456)
第二次推送后,我将拥有:
0x12000000 (301989888)
第三次推送后,我将拥有:
0x12300000 (305135616)
等等。有没有人对我如何实现这一目标有一个巧妙而巧妙的想法?解决方案需要能够以任意数字作为起点,并推到第一个可用的零。因此,提供 int301989888
作为起点并推动 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);
我为格式化道歉。