| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1478 人关注过本帖
标题:有没有人帮忙理解一下这道题的具体思路?最好是一点点解释?
只看楼主 加入收藏
从零学C
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2016-12-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
有没有人帮忙理解一下这道题的具体思路?最好是一点点解释?
程序代码:
#include <stdio.h>

unsigned long font;

char f = 0;   //id
unsigned long fm = 0xff<<f;  //id_mask

char s = 8;
unsigned long sm = 0x7f<<s;

char a = 15;
unsigned long am = 0x3<<a;

char b = 17;
unsigned long bm = 0x1<<b;

char i = 18;
unsigned long im = 0x1<<i;

char u = 19;
unsigned long um = 0x1<<u;

char align[3][7]={"left", "center", "right"};
char on_off[2][4]={"off", "on"};

int main(void)
{

 int n;

 char command[5];

 while(1)

 {
  printf("%-14s%-14s%-14s%-14s%-14s%-14s\n", "ID", "SIZE", "ALIGNMENT", "B", "I", "U");
  printf("%-14d%-14d%-14s%-14s%-14s%-14s\n", (font&fm)>>f, (font&sm)>>s, align[(font&am)>>a], on_off[(font&bm)>>b], on_off[(font&im)>>i], on_off[(font&um)>>u] );
  printf("f)change font    s)change size    a)change alignment\n");
  printf("b)toggle bold    i)toggle italic  u)toggle underline\n");
  printf("q)quit\n");
  gets(command);
  switch(command[0])
  {
   case 'f' : printf("Enter font ID (0-255): ");
      scanf("%d", &n);
      getchar();
      font = font & ~fm | n<<f;
      break;
   case 's' : printf("Enter font size (0-127): ");
      scanf("%d", &n);
      getchar();
      font = font & ~sm | n<<s;
      break;
   case 'a' : printf("Select alignment:\nl)left   c)center   r)right\n");
      gets(command); 
      switch(command[0])
      {
       case 'l' : font = font & ~am | 0<<a; break;
       case 'c' : font = font & ~am | 1<<a; break;
       case 'r' : font = font & ~am | 2<<a; break;
       default  : puts("error!");    break;
      }
      break;
   case 'b': font ^= 1<<b;
      break;
   case 'i': font ^= 1<<i;
      break;
   case 'u': font ^= 1<<u;
      break;
   default : puts(command);
      return 0;
  }


 }
}



还有一直搞不清楚unsigned long sm = 0x7f<<s;等等的这些是什么意思,是可以随便赋值的吗
搜索更多相关主题的帖子: 最好 color 
2016-12-14 15:46
从零学C
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2016-12-14
收藏
得分:0 
各路大牛有时间麻烦看看,在此谢过

一步一步,脚踏实地
2016-12-14 15:46
从零学C
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2016-12-14
收藏
得分:0 

一步一步,脚踏实地
2016-12-14 15:47
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10543
专家分:42934
注 册:2014-5-20
收藏
得分:10 
以下是引用从零学C在2016-12-14 15:46:06的发言:

还有一直搞不清楚unsigned long sm = 0x7f<<s;等等的这些是什么意思,是可以随便赋值的吗

位操作:0x7f 左移 s 位
2016-12-14 15:56
从零学C
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2016-12-14
收藏
得分:0 
回复 4楼 吹水佬
额这个意思我懂,就是不知道位操作的这些值比如0x7f  0xff   是可以随便定的吗

一步一步,脚踏实地
2016-12-14 16:05
从零学C
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2016-12-14
收藏
得分:0 
没有人????

一步一步,脚踏实地
2016-12-14 18:04
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:10 
回复 6楼 从零学C
是不是随便定的你把它转换成二进制才能看出来,如果S作为掩码的话,可能跟具体的硬件有关系

一切都在学习、尝试、摸索中
2016-12-14 18:15
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10543
专家分:42934
注 册:2014-5-20
收藏
得分:0 
0x是十六进制
2016-12-14 19:08
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10543
专家分:42934
注 册:2014-5-20
收藏
得分:0 
代码没有什么特别,一般的教科书都应该有讲到,翻翻书就明了。
2016-12-14 19:11
从零学C
Rank: 1
等 级:新手上路
帖 子:14
专家分:1
注 册:2016-12-14
收藏
得分:0 
那没有人能帮忙具体解释一下程序吗?

一步一步,脚踏实地
2016-12-16 12:57
快速回复:有没有人帮忙理解一下这道题的具体思路?最好是一点点解释?
数据加载中...
 
   



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

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