gpt4 book ai didi

c - 将 Nibbles 插入 C 中的整数堆栈

转载 作者:行者123 更新时间:2023-12-02 08:42:46 26 4
gpt4 key购买 nike

我有一个无符号整数,我想将半字节压入其中。例如,如果我有值为 1, 2, 3, 4, 5, 6, 7 & 8 的半字节,我希望能够将第一个半字节插入我的整数中:

0x10000000 (268435456)

第二次推送后,我将有:

0x12000000 (301989888)

第三次推送后,我将有:

0x12300000 (305135616)

等等。有没有人对我如何实现这一点有一个巧妙而巧妙的想法?该解决方案需要能够给出任何数字作为起点并推到第一个可用的零。因此,提供 int 301989888 作为起点并按下 3 将导致 305135616 。从 MSBLSB 推送也很有用。

我很抱歉。听起来像是一道考试题。不是 - 我只是想尝试一个实验,但我还没开始就卡住了!


勾选的答案很完美!我对它进行了如下稍微修改(只是为了使其独立),我非常高兴!

#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,半字节,左);

我为格式道歉。

最佳答案

您需要做两件事 - 检测将下一个半字节放在哪里,然后将其放在那里。对于检测,您可以屏蔽和移动:

int nextLocation(uint32_t x)
{
int i;
for (i = 28; i >= 0; i -= 4)
{
if (!(x & (0xfU << i)))
return i;
}
return -1;
}

此函数将返回“插入”下一个半字节所需的升档量(如果您的整数已满,则为 -1)。

然后,你需要输入新的值(假设x是你要压入的值,nibble是你要压入的值):

int shiftAmount = nextLocation(x);
x |= nibble << shiftAmount;

要插入另一个方向,您可以在 nextLocation 函数中更改 for 循环的方向:

for (i = 0; i <= 28; i += 4)

关于c - 将 Nibbles 插入 C 中的整数堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com