我想计算设置恰好为k
位的最小整数,即大于另一个整数x
。
例如,如果x = 1001010
那么对于k=2
,对于k=4
,答案应该是1010000
,答案应该是1001011
,对于k=5
,答案是1001111
我认为需要设置至少与整数x
设置的最左位一样多的位,然后在x
设置与下一个最左边设置位相邻的MSB侧位或者设置下一个最左边的设置位之间进行选择然后通过重复相同的过程来查看设置后面的位; 一直计算k中剩下的位数。
我不确定这是否是正确的方法。
++x; while (popcnt(x) > k) { // Substitute the least-significant group of bits // with single bit to the left of them x |= x-1; ++x; } unsigned bit = 1; while (popcnt(x) < k) { x |= bit; bit <<= 1; }
可以优化第二循环:
for (i = k - popcnt(x); i != 0; --i) { // Set the lowest non-set bit x |= x+1; }
以上就是c/c++开发分享计算设置的k位大于另一个整数x的最小整数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560269.html