我最近在为Operating System Engineering学习,当我试图阅读源代码时,我在kern/console.c
中发现了一个“神奇数字”。
基本上,static void cga_putc(int c)
中的kern/console.c
是一个将字符输出到控制台的函数,在这个内核中由cprintf
使用。
static void cga_putc(int c)
{
// if no attribute given, then use black on white
if (!(c & ~0xFF))
c |= 0x0700;
switch (c & 0xff) {
case '\b':
...
case '\n':
...
default:
crt_buf[crt_pos++] = c; /* write the character */
break;
}
...
}
但是,我不明白
if (!(c & ~0xFF)) c |= 0x0700;
的功能,有人能帮我吗?我不知道该看哪种材料。 最佳答案
通读一遍。
~0xFF:反转0xFF,即如果使用32位数字,则为0xFFFFFF00
c&0xffffff00:看高阶位
如果(!c):如果没有高阶位,则将高阶位设置为0x0700;
这一点的目的在前面的评论中得到了很好的解释:
//如果没有给定属性,则使用黑白
很可能是高阶位控制了文本的FG和BG颜色。