如何选择将作为数字掩码的就职(第一个)数字

时间:2015-06-06 18:11:26

标签: c bit-manipulation bitwise-operators

作为我的问题,如何选择或确定作为数字掩码的就职/第一个数字?

我在ansi C中学习操作(设置,清除等)。许多教程没有解释如何选择/确定掩码。例如:

// 1st tutorial
unsigned char foo = 0;
foo = foo | 0b0000000000000001; // how to determine this number we need number 1 (0b0000000000000001) as the mask?

// 2nd tutorial
#define Bitset(var,bitno) ((var) |=1UL<<(bitno)) // why choose 1UL ??

//第3教程 //来自http://teaching.idallen.com/cst8214/08w/notes/bit_operations.txt

    10101010 = AAh
AND 00001111 = 0Fh  <-- this is the 4-bit mask

在第3教程中他们如何决定选择00001111作为10101010的掩码?

1 个答案:

答案 0 :(得分:1)

他们没有“确定”数字,他们只给出了按位AND和OR运算符的例子。它们取两个数字(用位表示)并对其应用按位运算,显示操作结果。

示例foo = foo | 0b0000000000000001;可以写为foo = foo | 1;,甚至可以写为foo |= 1;

maco #define Bitset(var,bitno) ((var) |=1UL<<(bitno))将位bitno设置为1(第一位为位0)。它取最大整数类型的数1(长 - L),无符号(U),因此最高位不会被视为符号,并将bitno位置(位)移至左边。因为它们采用最大的整数类型,所以它可以在任何(更小或相同大小)整数类型上工作,并且在使用宏的地方,编译器会根据需要将结果缩放回更小的类型。

例如:

int i= 0x2220;
i= Bitset(i,3);

i现已变为0x2228。