gpt4 book ai didi

c - 移位操作的反转 - 确定用于生成值的移位计数

转载 作者:行者123 更新时间:2023-11-30 20:49:56 24 4
gpt4 key购买 nike

我有代码通过使用左移从初始值 1 生成一个值。在代码中的不同点,我知道生成的值,并且需要计算用于生成该值的移位计数。

换句话说,我需要通过对生成的值执行操作来确定用于生成移位操作结果的移位计数。

是否可以在不使用专用函数的情况下反转基二变量的移位操作?我正在查找移位计数变量 y 的值,当移位值 x 和移位操作的结果 z 为已知。

示例:

x << y = z
1 << 6 = 64

z = 64 and x is 1 but what is y??? // how to calculate y, the shift count?

有很多解决方案,包括 log(64)/log(2),但我必须使用 math.h。我正在寻找某种快速且不需要函数的按位运算。

编辑:谢谢您的回答!我的问题得到了解答,没有办法通过简单的操作来解决这个问题,我的编译器没有 CTZ。 BR

最佳答案

假设你知道xz来自z = x << y ,并想了解y使用按位运算,一个简单的方法是取 x一次移动一位,将结果与 z 进行比较(即从 y = 0 开始,每次比较失败后将 y 加 1)。

编辑:另一方面,如果 x1 (或者实际上,如果 x 设置了最低位),您还可以计算 z 中的尾随零。 。您的处理器可能有一条用于此目的的指令,您的 C 编译器可能会将其公开为不可移植的扩展,例如 __builtin_ctz (您可以考虑使用预处理器在此解决方案和可移植解决方案之间切换)。对于这个问题,还有比简单循环更快、可移植的解决方案——搜索“计数尾随零”。

(如果 x 没有设置最低位,则可以计算 xz 中的尾随零以找出差异。)

关于c - 移位操作的反转 - 确定用于生成值的移位计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56396877/

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