gpt4 book ai didi

c - 寻找最少的位来存储 int 的 2 补码

转载 作者:行者123 更新时间:2023-11-30 15:52:08 29 4
gpt4 key购买 nike

这是我目前正在做的家庭作业。我们要做的就是查看传递的 32 位 int x 并返回以 2 补码形式存储该值所需的最少位。

例如:

howManyBits(0) = 1;
howManyBits(-1) = 1;
howManyBits(7) = 4;
howManyBits(-10) = 5;

问题在于我只能使用按位运算符来找到它,我不能有大于一个字节的常量,而且我的操作总数不能超过 90 次。目前,我可以从最高有效位开始一直涂抹 1,然后对其中的每个 1 进行计数。然而,由于它是一个 32 位 int,并且每次检查是否有位翻转时,我都必须将 int 向右移动 1 以上,因此对位进行计数的过程本身需要 90 次操作,并且由于位涂抹花了 20 个,我远远超过了最大操作数。

此外,我不会在解决方案中大声使用条件或循环。

我知道如果我能找出一个可以解决这个问题的 log_2 算法,但我也无法仅用按位运算符来解决这个问题。

我想要的只是一个提示/解释一个可以用更少的操作完成的过程,而不是一个实际的代码解决方案。谢谢!

最佳答案

需要 7 次运算才能找到 32 位数字的 log_2。查看优秀Bit Twiddling Hacks

关于c - 寻找最少的位来存储 int 的 2 补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14676420/

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