| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1358 人关注过本帖
标题:textattr为何要左移四位
只看楼主 加入收藏
nmdsyz
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-1-8
收藏
 问题点数:0 回复次数:4 
textattr为何要左移四位
Turbo C 另外还提供了一个函数,可以同时设置文本的字符和背景颜色,这个函数的调用格式为:
void textattr(int attr);

其中: attr的值表示颜色形式编码的信息,每一位代表的含义如下:

位 7 6 5 4 3 2 1 0
B b b b c c c c
↓ ┕━━━┙ ┖─────┘
闪烁 背景颜色 字符颜色
字节低四位cccc设置字符颜色(0到15),4--6三位bbb设置背景颜色(0到7),第7位B设置字符是否闪烁。假如要设置一个兰底黄字,定义方法如下: textattr(YELLOW+(BLUE<<4)); 若再要求字符闪烁,则定义变为: textattr(128+YELLOW+(BLUE<<4);
注意:
(1) 对于背景只有0 到7 共八种颜色,若取大于7 小于15的数,则代表的颜色与减 7后的值对应的颜色相同。
(2) 用textbackground()和textcolor() 函数设置了窗口的背景与字符颜色后,在没有用clrscr()函数清除窗口之前,颜色不会改变,直到使用了函数clrscr(),整个窗口和随后输出到窗口中的文本字符才会变成新颜色。
(3) 用textattr()函数时背景颜色应左移4位,才能使3位背景颜色移到正确位置。
下面这个程序使用了关于窗口大小的定义、颜色的设置等函数,在一个屏幕上不同位置定义了7个窗口,其背景色分别使用了7种不同的颜色。
 
以上这段话中“注意”的第三点中说“背景颜色应左移四位才能使3位背景颜色移到正确位置”,这句话不是很明白,请问为何要“左移四位”呢?谢谢!
搜索更多相关主题的帖子: textattr 
2008-11-17 21:28
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
假设你要设置背景颜色为011,字符颜色是1010,那么就应该这么写
textattr((0x03 << 4) & 0x0A)
0x03是就是二进制的011,在这里就需要左移四位了.0x0A是二进制的1010,不需要左移

当然,这样写纯属无聊,直接写
textattr(0x3A)就好了

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-11-17 22:03
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
要不左移的话,背景色不就写在012位了么,不就和字符色打架了么
左移了才会到正确的456位上啊

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-17 22:15
nmdsyz
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-1-8
收藏
得分:0 
想清楚了
例如:蓝底 黄字
蓝是:0000 0001
黄是:0000 1110
它们加起来是:0000 1111 等于 15
再减去7(0000 0111) 等于8(0000 1000)
如果不移位的话,就是深灰色,
如果移位就是:0001 0000(1移位后) + 0000 1110=0001 1110 符合位数成功!!
谢谢大家!!
2008-11-17 23:11
nmdsyz
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-1-8
收藏
得分:0 
二楼的方法简单,谢谢
2008-11-17 23:15
快速回复:textattr为何要左移四位
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016052 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved