首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么VGA颜色需要按位移位?

为什么VGA颜色需要按位移位?
EN

Stack Overflow用户
提问于 2019-04-20 04:52:32
回答 2查看 152关注 0票数 1

我一直在遵循https://wiki.osdev.org/Bare_Bones的Bare Bones内核指南,但我不理解这些方法。有人能解释一下为什么方法中的位运算符是必要的吗?提前感谢!

代码语言:javascript
复制
enum vga_color {
    VGA_COLOR_BLACK = 0,
    VGA_COLOR_BLUE = 1,
    VGA_COLOR_GREEN = 2,
    VGA_COLOR_CYAN = 3,
    VGA_COLOR_RED = 4,
    VGA_COLOR_MAGENTA = 5,
    VGA_COLOR_BROWN = 6,
    VGA_COLOR_LIGHT_GREY = 7,
    VGA_COLOR_DARK_GREY = 8,
    VGA_COLOR_LIGHT_BLUE = 9,
    VGA_COLOR_LIGHT_GREEN = 10,
    VGA_COLOR_LIGHT_CYAN = 11,
    VGA_COLOR_LIGHT_RED = 12,
    VGA_COLOR_LIGHT_MAGENTA = 13,
    VGA_COLOR_LIGHT_BROWN = 14,
    VGA_COLOR_WHITE = 15,
};

static inline uint8_t vga_entry_color(enum vga_color fg, enum vga_color bg) 
{
    return fg | bg << 4;
}

static inline uint16_t vga_entry(unsigned char uc, uint8_t color) 
{
    return (uint16_t) uc | (uint16_t) color << 8;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-20 18:54:56

该代码用于生成VGA Compatible Text Mode

枚举指定了一个采用四位的颜色表。第一个函数接受前景和背景颜色,并对背景颜色进行位移位,以便这两种颜色适合八位无符号整数。

第二个函数接受上面定义的8位uint,并将其附加到8位字符,以产生定义字母、背景色和前景色的16位值。

票数 4
EN

Stack Overflow用户

发布于 2019-04-21 07:37:03

看起来你是在一个每像素4位的模型中操作。因此,每个字节需要两个值。位碎片将两个4位值放入一个8位字节中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55767742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档