gpt4 book ai didi

c - 解释这个功能

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

有人可以向我解释为什么有人要使用按位比较吗?示例:

int f(int x) {
return x & (x-1);
}
int main(){
printf("F(10) = %d", f(10));
}

这才是我真正想知道的:“为什么要检查公共(public)设置位”

x 是任何正数。

最佳答案

使用位运算有以下三个原因:

  • 您可以使用尽可能少的空间来存储信息
  • 您可以在一条 CPU 指令中比较/修改整个寄存器(例如 32、64 或 128 位,具体取决于您的处理器),通常需要一个时钟周期。这意味着与常规算术相比,您可以盲目快速地完成大量工作(某些类型)。
  • 这很酷,很有趣,也很有趣。程序员喜欢这些东西,当技术之间在效率/性能方面没有差异时,它们通常可以成为差异化因素。

您可以将它用于各种非常方便的事情。例如,在我的数据库中,我可以在一个很小的空间中存储很多关于我的客户的真/假信息(一个字节可以存储 8 个不同的真/假事实),然后使用 '&' 操作来查询他们的状态:

  • 我的顾客是单例男性还是吸烟者?

    if (customerFlags & (maleFlag | singleFlag | smokerFlag) ==
    (maleFlag | singleFlag | smokerFlag))

  • 我的客户(任意组合)是男性、单例还是吸烟者?

    if (customerFlags & (maleFlag | singleFlag | smokerFlag) != 0)

  • 我的顾客不是男性,不是单例,也不是吸烟者)吗?

    if (customerFlags & (maleFlag | singleFlag | smokerFlag) == 0)

除了“检查公共(public)位”之外,您还可以:

  • 某些算术,例如value & 15value % 16 快得多。这仅适用于某些数字,但如果您可以使用它,那将是一个很好的优化。

  • 数据打包/解包。例如颜色通常表示为包含 Alpha、Red、Green 和 Blue 字节值的 32 位整数。 Red 值可以用类似 red = (value >> 16) & 255; 的表达式提取(将值向下移动 16 位位置,然后切掉底部字节)

    • 数据处理和调配。一些巧妙的技巧可以通过按位运算来实现。例如,无需使用第三个临时变量即可交换两个整数值,或将 ARGB 颜色值转换为另一种格式(例如 RGBA 或 BGRA)

关于c - 解释这个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506739/

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