所以我想切换我的数字的最高有效位。这是一个例子:
x = 100101 then answer should be 00101
我有一台 64 位机器,因此我不希望答案是100000..<51 0's>..100101
我想到的一种方法是计算我的数字中的位数,然后切换 MSB,但不确定如何计算。
作弊方法是将其交给编译器:大多数 CPU 中都有执行此类工作的指令。
以下应该做你想做的事。
i ^ (1 << (sizeof i * CHAR_BIT - clz(i) - 1))
这将转化为CLZ
指令,计算前导零。
对于海湾合作委员会,请参阅:http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Other-Builtins.html
需要注意的一件事是,如果i == 0
.
你应该更换clz()
具有适合您的编译器的正确内在函数,在 GCC 中这是__builtin_clz
;在 Visual Studio C++ 中这是_BitScanForward
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)