gpt4 book ai didi

c - 如何使用位操作找到第 5 位,并返回整数中 1 位的数量

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:54 25 4
gpt4 key购买 nike

假设 Z 是一个无符号整数。使用 ~、<<、>>、&、| 、+ 和 - 提供返回所需结果的语句。

如果需要,我可以引入新的二进制值。

我有这些问题:

1.从左边 Z 中提取第 5 位。

为此,我正在考虑做类似的事情

  x x x x x x x x 
& 0 0 0 0 1 0 0 0
___________________

0 0 0 0 1 0 0 0

这对提取第五位有意义吗?当我不知道它的值时,我不确定如何仅使用 Z 来完成这项工作。 (我对这一切都比较陌生)。这种想法行得通吗?

2.返回Z中1的位数

Here I kind of have no idea how to work this out. What I really need to know is how to work on just Z with the operators, but I m not sure exactly how to. 

就像我说的,我是新手,所以任何帮助都将不胜感激。

最佳答案

问题1

您说得对。我会做一个 & 和一个 >>> 这样你就可以得到一个不错的 0 或 1。

result = (z & 0x08) >> 3;

但是,这可能不是绝对必要的。例如,如果您尝试检查该位是否设置为 if 条件的一部分,您可以利用 C 对任何非零值的定义为真。

if (z & 0x08)
do_stuff();

问题2

a whole variety of ways去做这个。根据该页面,以下方法可追溯到 1960 年,但直到 1988 年才以 C 语言发布。

for (result = 0; z; result++)
z &= z - 1;

一开始可能并不明显,但如果您研究了几个示例,您很快就会明白为什么会这样。

值得注意的是,这个操作——确定数字中 1 的位数——非常重要,需要一个名称(人口计数或 Hamming weight),并且在最近的 Intel 和 AMD 处理器上,一个 dedicated instruction .如果您使用的是 GCC,则可以使用 __builtin_popcount 内部函数。

关于c - 如何使用位操作找到第 5 位,并返回整数中 1 位的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22211973/

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