我如何获得int的低8位?

时间:2010-07-17 04:54:32

标签: c

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

有关

4 个答案:

答案 0 :(得分:34)

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

请注意以下几点:

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

  6. 要访问某个数字位,请说k位:

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

    现在,如果kthbit的{​​{1}}位为0,k将为0,如果n2**k,则为k n的位是1。

答案 1 :(得分:15)

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

unsigned char c = (x & 0xFF);

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

答案 2 :(得分:8)

最好的方法是使用位逻辑运算符&amp;具有适当的价值。

所以对于低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 */

答案 3 :(得分:2)

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

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

将测试第四位是否置位。

类似地,您可以使用&amp;提取最低8位(作为整数)。使用一个只设置最低8位的数字,即num & 255num & 0xFF(十六进制)。