gpt4 book ai didi

c - 可变填充 C

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:35 25 4
gpt4 key购买 nike

假设我们有一个变量 x 64 位,我们也知道我们实际使用了多少位这样的变量,比如说 1 <= nx <= 64 , 所以最后一位在位置 nx - 1 .在剩余的 64 - nx 中执行最后一位填充的最快方法是什么? ?

我会尝试类似(伪代码/C)的方法:

uint64_t padd_input(uint64_t x, int nx) {
assert(0 < nx && nx <= 64);
msb = (x & (1ULL<<(nx - 1))) != 0ULL; //or (x >> (nx - 1)) & 0x1ULL;
x |= ((msb<<(64 - nx)) - msb)<<nx;
return x;
}

所有的移位/屏蔽都是多余的吗?还是有更聪明的方法来实现同样的目标?

我举一个我想实现的例子,假设未使用的部分已经设置为0。

假设我有 0x7 , 和 nx = 4在这种情况下,没有什么可做的。相反,假设 0xF填充必须提供 0xFFFFFFFFFFFFFFFF .

最佳答案

我会这样做:

uint64_t padd_input(uint64_t x, int nx)
{
uint64_t t = x & (1ULL << (nx-1));
t = t - 1;
x = x | ~t;
return x;
}

或许

uint64_t padd_input(uint64_t x, int nx)
{
uint64_t t = x & (1ULL << (nx-1));
if (t)
{
t = t - 1;
x = x | ~t;
}
return x;
}

因为我觉得更清楚。

注意:我没有比较 OP 代码和我的代码的性能。

关于c - 可变填充 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37988240/

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