代码之家  ›  专栏  ›  技术社区  ›  Vladimir

将整数值设置为位掩码

c
  •  4
  • Vladimir  · 技术社区  · 16 年前

    为整数值指定位掩码的最简单方法是什么? 例如,我想要第一、第三和第四位为1的整数,其他为0。

    当然,我在寻找代码,而不是单个值!当然有很多可能,但我试图找到最简单和最具描述性的外观

    6 回复  |  直到 13 年前
        1
  •  9
  •   unwind    16 年前

    我认为最好的思考方式!!)只对0中的位进行索引,然后应用“设置n:th位,按位或使用值(1<<n)”:

    int first_third_and_fourth = (1 << 0) | (1 << 2) | (1 << 3);
    
        2
  •  7
  •   paxdiablo    16 年前

    如果您希望您的代码在位数字方面是可读的,那么这样的代码可能很有用:

    #define b0  0x0001
    #define b1  0x0002
    #define b2  0x0004
    #define b3  0x0008
    #define b4  0x0010
    :
    #define b15 0x8000
    
    int mask = b3|b2|b0;
    

    但是,一段时间之后,您应该能够分辨出哪些十六进制值与哪些位相关,并且您不需要这样的记忆技巧:

    int mask = 0x000d;
    
        3
  •  2
  •   Brian R. Bondy    16 年前

    使用或位运算符( | )要组合位:

    #define FIRST_BIT (0x1)
    #define SECOND_BIT (0x2)
    #define THIRD_BIT (0x4)
    #define FOURTH_BIT (0x8)
    /* Increase by for each bit, *2 each time, 
       0x prefix means they're specified via a hex value */
    
    int x = FIRST_BIT | THIRD_BIT | FOURTH_BIT;
    

    您可以使用和位运算符检查是否设置了位( & ):

    int isset = x&FIRST_BIT;
    
        4
  •  1
  •   Sean Bright Sean Stinehour    16 年前

    应该这样做:

    int x = 0x0D;
    

    如果你有幸使用GCC并且不需要便携:

    int x = 0b1101;
    
        5
  •  0
  •   catchmeifyoutry    16 年前

    这里有一个在线位转换器,如果您不想自己做求和:

    http://www.binaryconvert.com/convert_unsigned_int.html

    只需填写下面的位(如1101),然后计算答案(如0x000000D)。 任何有能力的计算器都应该能够做到这一点…

        6
  •  0
  •   bitmask    13 年前

    int something = 0x00000001 * 2;
    

    直到你到达你想要的地方。