枚举、按位与或运算、位移的简单应用.doc

上传人:scccc 文档编号:13970345 上传时间:2022-01-28 格式:DOC 页数:5 大小:27.50KB
返回 下载 相关 举报
枚举、按位与或运算、位移的简单应用.doc_第1页
第1页 / 共5页
枚举、按位与或运算、位移的简单应用.doc_第2页
第2页 / 共5页
枚举、按位与或运算、位移的简单应用.doc_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《枚举、按位与或运算、位移的简单应用.doc》由会员分享,可在线阅读,更多相关《枚举、按位与或运算、位移的简单应用.doc(5页珍藏版)》请在三一文库上搜索。

1、枚举、按位与或运算、位移的简单应用 当我们在写程序的时候,经常会遇到各种各样的设置,比如设置窗口 的四条边的停靠状态(比如上边是否停靠在父控件的上边上、左边是 否停靠在父控件的左边上、右边是否停靠在父控件的右边上、底边是 否停靠在父控件的底边上。方案1或许你想到的第一个答案是设置四个BOOL值,用C语言实现的代码 或许是这样的。include typedef char BOOL;#define True 1#define False 0int main(int argc, const char * argvQ) 定义BOOL isTop;BOOL isLeft;BOOL isRight;BOO

2、L isBottom;赋值isTop = True;isLeft = False;isRight = True;isBottom 二 False;使用prlntf(,%dnM,isTop);printf(,%dnM,IsLeft);printf(,%dn,isRight);printf(%dn,isBottom);return 0;这是一种最常用的方式,但是这种只是最笨的一种方式,因为你需耍4值來实现整段逻 辑。最笨,最常用,但是这也最简单、最容易理解,但是在赋值的时候相对來说你要写 四遍。方案2如果你熟悉内存中数据的保存格式和按位与或运算,你或许会想到这 样来解决掉这个问题,对于你这样赋值相

3、对会容易很多include #define isDockTop(dock) isDock(dockjsTop)#define isDockLeft(dock) isDock(dockjsLeft)#define isDockRight(dock) isDock(dock,isRight)#define isDockBottom(dock) isDock(dock,isBottom)typedef char BOOL;typedef enumisTop= 1,isLeft = 2,isRight= 4,isBottom = 8 Dock;#define True 1#define False 0

4、BOOL isDock(Dock dock,Dock dockTo)return (dock & dockTo) 0;int main(int argc, const char * argvQ) 定义char dock;赋值dock = isTop | isRight;使用prlntf(MlsTopt%dnMfisDockTop(dock); prlntf(,isLeftt%dnMisDockLeft(dock);printf(,isRightt%dnH,isDockRight(dock); printf(,isBottomt%dn,lisDockBottom(dock);return 0;可

5、能对丁这个编码风格大家还是相对熟悉一些的,因为在赋值的时候,可能会经常的看 到这种按位与运算赋值,因为这个赋值实在是太方便了。关于那个枚举的值为什么这么 写呢?因为C语言中通用的内存数据保存的原因,深层次的原因,我就不在此赘述。因 为这个太基础了。或许你现在觉得这个玩意还行,但是枚举的值,太难写了。或许,我们可以通过以下写 法來让枚举变得相对简单一些typedef enumisTop= 0B0001,isLeft 二 0B0010,isRight二 0B0100,isBottom = OBI 000 Dock;直接将二进制的数字写到文件里边,Char只有8个bit的还好说一些,但是像ini这种

6、有32bit的,早就眼花了把。或许我们可以通过位移來快速方便的解决掉这个问题。方案2最终版include define isDockTop(dock) isDock(dockjsTop)define isDockLeft(dock) isDock(dockjsLeft)define isDockRight(dock) isDock(dockjsRight)define isDockBottom(dock) isDock(dock,isBottom)typedef char BOOL;typedef enumisTop= 1,isLeft = 1 1,isRight= 1 2,isBottom

7、= 1 3 Dock;#define True 1#define False 0BOOL isDock(Dock dock,Dock dockTo) return (dock & dockTo) 0;int main(int argc, const char * argvQ) 定义char dock;賦值dock = isTop | isRight;使用 prlntf(,isTopt%dn,fisDockTop(dock); prlntf(,isLeftt%dnMisDockLeft(dock); printf(HisRightt%dn,lisDockRight(dock); printf(,isBottomt%dn,fisDockBottom(dock);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1