【问题标题】:C++ - Using Bitmask to get values from an intC++ - 使用位掩码从 int 中获取值
【发布时间】:2017-12-01 05:39:29
【问题描述】:

我在原始文件中获得了一个 32 位数字,该数字呈现为 int。我需要一个值中最右边的 8 位 (0-7),而另一个值中需要下一个最右边的 8 位 (8-15)。有人告诉我使用位掩码和位移位来解决所有问题,但我不知道它如何处理整数。

【问题讨论】:

    标签: c++ binary integer bit-shift bitmask


    【解决方案1】:

    要只获取最右边的 8 位,您可以这样做

    int right8 = mynum & 0xFF;
    

    因为您将前 24 位与 0 相加,所以这些将设置为 0,而后 8 位将保留它们的值,因为它们将与 1 相加。

    为了获得最右边的下一个 8,您需要在位掩码中将位 8-15 设置为 1,将其他所有位设置为零。这将在位置 8-15 中保持相同的位,但由于您需要它们位于底部 8 位,您可以简单地将它们向右移位 8 个位置。您可以通过以下方式做到这一点。

    int next8 = myNum & 0xFF00;
    int next8 = next8 >> 8;
    

    【讨论】:

    • 推荐一个编辑以准确了解什么是班次和什么是掩码。对于未来有类似但不准确问题的提问者,这将使答案更加通用。
    • 或者,您可以先右移,然后用 0xFF 屏蔽结果:int next8 = (myNum >> 8) & 0xFF;
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多