作为我的问题,如何选择或确定作为数字掩码的就职/第一个数字?
我在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的掩码?
答案 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。