我如何获得int的低8位?

假设我有一个int变量n = 8.在大多数机器上,这将是一个32位的值。 我怎样才能得到二进制的低8位(最低字节)? 另外我如何访问每一位以找出它是什么? 我的问题与C有关

unsigned n = 8; unsigned low8bits = n & 0xFF; 

请注意以下几点:

  1. 对于按位运算,始终使用unsigned类型
  2. 可以使用&运算符使用二进制掩码从数字中提取位
  3. 要访问低8位,屏蔽为0xFF因为在二进制中,它的低8位开启,其余为0
  4. 数字8的低8位是…… 8(考虑一下)

要访问某个数字的某个位,请说第k位:

 unsigned n = ...; unsigned kthbit = (1 << k) & n; 

现在,如果nk位为0,则kthbit将为0;如果nk位为n ,则kthbit将为正数( 2**k )。

使用按位算术来屏蔽最低的8位:

 unsigned char c = (x & 0xFF); 

为了访问第n个最低位,等式为(x & (1 << n)) (n为零表示最低有效位)。 结果为零表示该位清零,非零表示该位已设置。

最好的方法是使用位逻辑运算符并使用适当的值。

所以对于低8位:

 n & 0xFF; /* 0xFF == all the lower 8 bits set */ 

或者作为一般规则:

 n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */ 

您可以与位移运算符组合以获取特定位:

 (n & (1<<3))>>3; /* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */ 

您可以使用<<和&来测试是否在数字中设置了特定位,即:

if (num & (1<<3)) ...

将测试第四位是否设置。

类似地,您可以通过使用&仅提取最低8位的数字来提取最低8位(作为整数),即num & 255num & 0xFF (hex)。