我正在编写一个C ++程序,并且需要一个在所有现有的“ 1”之后将所有9位都设置为1的函数。
也就是说,我要编写一个void set10BitsFull(int64_t& n)将整数“ int64_t n = 0b...1000000000...” set10BitsFull(n)转换n为“ 0b...1111111111...” 的函数。
(更新)将输入整数的位稀疏地设置为1,并且两个1之间至少有10位距离。对于样本输入0x20000200,期望的输出为0x3FF003FF。最后1个位之后将至少有9位0。最左边的10位将始终为零。
这是我对该功能的实现
/**
* Inline function that set 10 bits to 1 after each set 1
* i.e.,
* ......1000000000...... -> ......1111111111.......
*
* @param n
* pointer of input number
*/
inline void set10BitFull(int_fast64_t *n) {
// n = 1000000000
*n |= (*n >> 1); // n = 1100000000
*n |= (*n >> 2) | …Run Code Online (Sandbox Code Playgroud)