这是我在C程序中看到的代码,我知道这段代码是在位ASCII位图中设置与字符c相对应的位。
field[ (c & 0x7f) >> 3 ] |= 1 << (c & 0x07);
字段是由16个字符组成的数组,每个字符为8位。
例如'97'是小写字母'a',如果将c设置为97,则位位置97将设置为1。
有谁知道上面的代码为什么会设置对应于字符c的位图?
那些魔术数字0x7f,0x07、3和1分别代表什么?
最佳答案
如果您的数组长16个字节,则它具有128位(16 x 8)。因此,第一个掩码(0x7f)保证您仅对前128个字符感兴趣。一旦将其右移3位,您将剩下4位用于寻址位字段(数字(((c&0x7F)>> 3是0到15之间的数字)。因此,此部分使用高4位地址字节。
现在,您需要对字节中的位进行寻址,因此使用掩码0x07将值限制为0-7(对应于位0至7)。您使用此数字将1个位置移位。
最后,在位置0到127中设置了一个位(8位的16字节)。我希望这有帮助!