我最近正在为Operating System Engineering学习,我找到了一个神奇的数字"当我尝试阅读源代码时,我无法在kern/console.c
中找到答案。
基本上,kern/console.c
中的static void cga_putc(int 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;
的功能,任何人都可以帮助我吗?我不知道应该看哪些材料。
答案 0 :(得分:3)
通读。
~0xFF:如果使用32位数字
,则反转0xFF,即0xFFFFFF00c& 0xffffff00:查看高阶位
if(!c):如果没有高位,则将高位设置为0x0700;
在前面的评论中已经解释了这个目的:
//如果没有给出属性,则在白色上使用黑色
高阶位很可能正在控制文本的FG和BG颜色。