cga_putc中0x0700的功能是什么?

时间:2017-04-05 03:53:27

标签: c console operating-system printf

我最近正在为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;的功能,任何人都可以帮助我吗?我不知道应该看哪些材料。

1 个答案:

答案 0 :(得分:3)

通读。

  

~0xFF:如果使用32位数字

,则反转0xFF,即0xFFFFFF00      

c& 0xffffff00:查看高阶位

     

if(!c):如果没有高位,则将高位设置为0x0700;

在前面的评论中已经解释了这个目的:

  

//如果没有给出属性,则在白色上使用黑色

高阶位很可能正在控制文本的FG和BG颜色。