【问题标题】:How do I get the lower 8 bits of an int?如何获得 int 的低 8 位?
【发布时间】:2010-07-17 04:54:31
【问题描述】:

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

【问题讨论】:

    标签: c


    【解决方案1】:
    unsigned n = 8;
    unsigned low8bits = n & 0xFF;
    

    注意几点:

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

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

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

    现在,如果n 的第k 位为0,则kthbit 将为0,如果n 的第k 位为1,则为某个正数(2**k)。

    【讨论】:

      【解决方案2】:

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

      unsigned char c = (x & 0xFF);
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 第一位是指“0”位还是“1”位?
        【解决方案4】:

        您可以使用

        if (num &amp; (1&lt;&lt;3)) ...

        将测试第四位是否设置。

        同样,您可以使用 & 和一个仅设置了最低 8 位的数字(即 num &amp; 255num &amp; 0xFF(十六进制))来提取最低 8 位(作为整数)。

        【讨论】:

          猜你喜欢
          • 2011-07-15
          • 1970-01-01
          • 1970-01-01
          • 2019-08-24
          • 2020-11-13
          • 1970-01-01
          • 2019-03-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多