gpt4 book ai didi

c - 理解C中的这个符号

转载 作者:行者123 更新时间:2023-11-30 21:48:30 25 4
gpt4 key购买 nike

这段代码中的 & 是什么意思:

(number >> 9) & 0b111

我了解 & 的指针。但不确定上面的代码是如何工作的

最佳答案

让我们分解一下:

(number >> 9) & 0b111
| | | | |
| | | | Binary '7'*
| | | Binary AND
| | Number to shift by
| Binary shift operator
Variable

我们将从括号中的表达式开始:

(number >> 9)

这将执行二进制右移 9 位。例如:
1101101010010011 将转变为:
0000000001101101

& 符号是二进制 AND。如果两个源变量中的位均为 1,则返回值将设置这些位:

  01101
& 11010
= 01000

因此,您的代码将数字移动 9 位,并对结果与 b111 执行 AND 操作。由于三个最低有效位均在第二个输入中设置,因此此操作的结果将是在移位输入的底部三位中设置的位。

示例:

 number =               1101101010010011
number >> 9 = 0000000001101101
(number >> 9) & '111' = 0000000000000101

另一种思考方式如下:该行提取位 10-12 并将它们作为结果返回。

XXXXbbbXXXXXXXXX -> bbb

此操作的常见用途是将掩码应用于值以提取位。例如。有些库允许您传递具有可枚举类型的参数,如下所示:

set_params(option_a | option_b);

它同时设置option_aoption_b。可以通过以下方式读取参数是否设置:

set_params(unsigned int params)
{
if (params & option_a)
{ /* do option_a stuff */}
}

*假设您的编译器具有 C 规范的二进制扩展。否则你可以使用0x7(十六进制7)或只是7

关于c - 理解C中的这个符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462300/

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