如何屏蔽32位整数的最右边16位?

时间:2013-11-18 03:28:45

标签: c

我正在从文件中读取32位整数值。我需要读取每个整数的最右边16位,并将每个整数分成8位数。

我从档案中读取的数字:1,256,32768,32769,128,65534,33153

我非常感谢你帮助开始这个项目。

我现在使用的代码是:

   unsigned result = (inputValue & 0xFFFF0000) >> 16

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用位掩码。我假设“最右边”表示从0到15的位。然后你可以定义如下的宏(快速解决方案):

#define GET_RIGHTMOST_16_BITS(x) ((x) & (unsigned int)0x0000FFFF)
#define GET_LOW_8_BITS(x) ((x) & (unsigned short)0xFF)
#define GET_HIGH_8_BITS(x) (((x) & ~((unsigned short)0xFF)) >> 8)

有关详细信息,请阅读“The C Programming Language”一书中的位操作

答案 1 :(得分:1)

每当想要在C中使用显式大小整数时,请考虑固定宽度类型。

#include <stdint.h>

uint16_t rightmost16bits(uint32_t i) {
  return (uint16_t) (i >> 16);
}

void divide_into8bit_numbers(uint16_t i, uint8_t *MSByte, uint16_t *LSByte) {
  *MSByte = (uint8_t) (i >> 8);
  *LSByte = (uint8_t) (i & 0xFF);
}

uint32_t i = fromfile();
uint16_t right = rightmost16bits(i);
uint8_t Numbers8Bit[2];
divide_into8bit_numbers(right, &Numbers8Bit[1], &Numbers8Bit[0]);