【发布时间】:2017-12-01 05:39:29
【问题描述】:
我在原始文件中获得了一个 32 位数字,该数字呈现为 int。我需要一个值中最右边的 8 位 (0-7),而另一个值中需要下一个最右边的 8 位 (8-15)。有人告诉我使用位掩码和位移位来解决所有问题,但我不知道它如何处理整数。
【问题讨论】:
标签: c++ binary integer bit-shift bitmask
我在原始文件中获得了一个 32 位数字,该数字呈现为 int。我需要一个值中最右边的 8 位 (0-7),而另一个值中需要下一个最右边的 8 位 (8-15)。有人告诉我使用位掩码和位移位来解决所有问题,但我不知道它如何处理整数。
【问题讨论】:
标签: c++ binary integer bit-shift bitmask
要只获取最右边的 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;
【讨论】:
int next8 = (myNum >> 8) & 0xFF;