请选择 进入手机版 | 继续访问电脑版
贠老师培训群:150322713    贠老师QQ:767708506

贠老师office培训-excel学习网

 找回密码
 立即注册
点击咨询贠老师
查看: 208|回复: 10

[C语言] C语言中存储标志(flag)效率最高的方法

[复制链接]

3172

主题

3269

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22860
发表于 2015-12-24 23:03:07 | 显示全部楼层 |阅读模式
标志的作用是对程序执行过程中的两种或更多种选择作出决定。例如,在执行MS-DOS的dir命令时,可以用“/w”标志使该命令在屏幕上显示若干列文件名而不是每行只显示一个文件名。在3.5中你可以看到另外一个例子,该例通过一个标志从两种可能类型中选择一种在一个联合中使用。因为一个标志一般只有少数几个(通常是两个)值,所以,为了节省内存空间,ǔ2换峤?桓霰曛敬娣旁谝桓鍪粲谒?约旱膇nt或char类型中。

存储标志值的效率是存储空间和存取速度之间的一种折衷。存储空间利用效率最高的存储方法是用数目足够的位来存储标志值的所有可能值,但大多数计算机不能直接寻址内存中单独的一位,因此标志值要从存放它的字节中提取。存取速度最快的存储方法是将每个标志值都存放到一个属于它自己的整型变量中,但是,当一个标志只需要一位存储空间而变量的长度为32位时,那么其余的31位就全部浪费掉了,因此这种方法的存储空间利用效率非常低。

如果标志的数目不多,那么使用哪种存储方法是没有关系的。如果标志的数目很多,那么最好将它们压缩存储在一个字符数组或整型数组中。这时,需要通过一种被称为位屏蔽(bit masking)的过程来提取这些标志值,即屏蔽掉不需要的位,只处理所需的位。

有时,为了节省存储空间,可能会将一个标志和另外一个值存放在一起。例如,如果一个整型的值小于整型所能表示的最大值,那么就可用它的高阶位来存放标志;如果某些数据总是2或4的倍数,那么就可用它的低阶位来存放标志。在3.5的例子中,就使用了一个指针的低阶位来存放一个标志,该标志的作用是从两种可能的类型中选择一种作为该指针所指向的对象类型。
回复

使用道具 举报

3

主题

1016

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2015-12-28 10:32:30 | 显示全部楼层
大神啊!豁然开朗。。。。。。
回复 支持 反对

使用道具 举报

4

主题

1034

帖子

195

积分

注册会员

Rank: 2

积分
195
发表于 2016-1-7 18:00:10 | 显示全部楼层
写的不错,支持一下哟
回复 支持 反对

使用道具 举报

3

主题

1016

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2016-2-5 15:20:14 | 显示全部楼层
顶楼主,帮你顶个贴,我挣个积分
回复 支持 反对

使用道具 举报

0

主题

914

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2016-2-7 19:12:04 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

1

主题

880

帖子

7

积分

注册会员

Rank: 2

积分
7
发表于 2016-2-18 21:45:19 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

3

主题

1016

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2017-4-18 13:49:38 | 显示全部楼层
很不错的帖子,又学到了,力挺
回复 支持 反对

使用道具 举报

0

主题

914

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2017-8-31 15:29:44 | 显示全部楼层
谢谢您的分享!
回复 支持 反对

使用道具 举报

1

主题

880

帖子

7

积分

注册会员

Rank: 2

积分
7
发表于 2018-5-24 18:50:46 | 显示全部楼层
一下子解决了我工作当中的难题,谢谢楼主,非常感谢!
回复 支持 反对

使用道具 举报

0

主题

613

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2018-6-13 15:15:49 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



陕ICP备15003731号  

贠老师培训 GMT+8, 2018-12-14 23:55 , Processed in 0.244721 second(s), 29 queries .

快速回复 返回顶部 返回列表