我最近在为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颜色。

10-06 04:49