我有以下函数,用于设置N个最高位,例如 set_n_high(8) == 0xff00000000000000
uint64_t set_n_high(int n)
{
uint64_t v = 0;
int i;
for (i = 63 ; i > 63 - n; i--) {
v |= (1llu << i);
}
return v;
}
现在出于好奇,有没有不使用循环(或查找表)的方法在C语言中实现相同的操作?
编辑:n = 0和n = 64是需要处理的情况,就像循环变量一样。
n = 0
或n = 64
不起作用,你是否可以接受?这将允许一些简化。 - harold0uLL
。由于这是uint64_t
,因此可以使用((uint64_t)0)
,因为unsigned long long
可能比uint64_t
更宽,所以不必要去那么大的尺寸。 - chux - Reinstate Monica