gpt4 book ai didi

c - 切换 MSB 的最佳方式是什么?

转载 作者:太空狗 更新时间:2023-10-29 15:52:55 27 4
gpt4 key购买 nike

所以我想切换我数字的最高有效位。这是一个例子:

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 指令,该指令计算前导零。

对于 GCC,请参阅:http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Other-Builtins.html

要注意的一件事是,如果 i == 0,这会导致未定义的行为。

您应该将 clz() 替换为您编译器的正确内在函数,在 GCC 中,这是 __builtin_clz;在 Visual Studio C++ 中,这是 _BitScanForward

关于c - 切换 MSB 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533262/

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