【问题标题】:Bitwise operators - when/how do you use the operators &, |, ^, >> etc?位运算符 - 何时/如何使用运算符 &、|、^、>> 等?
【发布时间】:2011-05-30 22:42:21
【问题描述】:

我知道它们的作用,只是不明白你什么时候可以使用它们..

【问题讨论】:

    标签: operators bit-manipulation bitwise-operators bits


    【解决方案1】:

    当您需要操作数据块的各个位时(如字节或整数)。这经常发生,例如,在处理以下问题的算法中:

    • 加密
    • 压缩
    • 音视频处理
    • 网络(协议)
    • 持久性(文件格式)
    • 等

    【讨论】:

      【解决方案2】:

      我以前曾将它们用于位掩码。假设您有一个项目,其中包含一个项目列表,这些项目可以具有是或否值(例如汽车上的选项)。您可以通过将每个选项分配给数字中的二进制数字来分配一个整数列,该列将为每个选项提供一个值。

      Example: 5 = 101 in binary
      that would mean:
      option 1 - yes
      option 2 - no
      option 3 - yes
      

      如果您要对此进行查询,您将使用按位 & 或 |操作员选择正确的项目。

      Here is a good article 更详细地介绍了它。

      【讨论】:

        【解决方案3】:

        一个例子是,如果您将 (A)RGB 颜色存储为 32 位整数,并且您想要提取各个颜色分量:

        red = (rgb >> 16) & 0x000000ff;
        green = (rgb >> 8) & 0x000000ff;
        blue = rgb & 0x000000ff;
        

        当然,作为高级程序员,您通常更喜欢使用库函数来完成此操作,而不是自己摆弄位。但是该库可能会使用按位运算来实现。

        【讨论】:

        • @DarkLightA:如果你问为什么这个操作是必要的,它被称为掩码——你只想看到你感兴趣的位——其余的都设置为零。 en.wikipedia.org/wiki/Mask_%28computing%29#Masking_bits_to_0 如果你问为什么那里有不必要的零,很清楚我们正在处理 32 位整数,但如果你愿意,可以省略前导零。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多