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

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

ID:9041674

大小:78.90 KB

页数:5页

时间:2018-04-15

枚举、按位与或运算、位移的简单应用_第1页
枚举、按位与或运算、位移的简单应用_第2页
枚举、按位与或运算、位移的简单应用_第3页
枚举、按位与或运算、位移的简单应用_第4页
枚举、按位与或运算、位移的简单应用_第5页
资源描述:

《枚举、按位与或运算、位移的简单应用》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、枚举、按位与或运算、位移的简单应用当我们在写程序的时候,经常会遇到各种各样的设置,比如设置窗口的四条边的停靠状态(比如上边是否停靠在父控件的上边上、左边是否停靠在父控件的左边上、右边是否停靠在父控件的右边上、底边是否停靠在父控件的底边上。方案1或许你想到的第一个答案是设置四个BOOL值,用C语言实现的代码或许是这样的。#includetypedefcharBOOL;#defineTrue1#defineFalse0intmain(intargc,constchar*argv[]){   //定义   BOOLisTop;

2、   BOOLisLeft;   BOOLisRight;   BOOLisBottom;      //赋值   isTop=True;   isLeft=False;   isRight=True;   isBottom=False;      //使用   printf("%d",isTop);   printf("%d",isLeft);   printf("%d",isRight);   printf("%d",isBottom);      return0;}这是一种最常用的方式,但是这种只是最笨的一种方式,因

3、为你需要4值来实现整段逻辑。最笨,最常用,但是这也最简单、最容易理解,但是在赋值的时候相对来说你要写四遍。方案2如果你熟悉内存中数据的保存格式和按位与或运算,你或许会想到这样来解决掉这个问题,对于你这样赋值相对会容易很多#include#defineisDockTop(dock)isDock(dock,isTop)#defineisDockLeft(dock)isDock(dock,isLeft)#defineisDockRight(dock)isDock(dock,isRight)#defineisDockBottom

4、(dock)isDock(dock,isBottom)typedefcharBOOL;typedefenum{   isTop     =1,   isLeft     =2,   isRight   =4,   isBottom   =8}Dock;#defineTrue1#defineFalse0BOOLisDock(Dockdock,DockdockTo){   return(dock&dockTo)>0;}intmain(intargc,constchar*argv[]){   //定义   chardock;      //赋值

5、   dock=isTop

6、isRight;      //使用   printf("isTopt%d",isDockTop(dock));   printf("isLeftt%d",isDockLeft(dock));   printf("isRightt%d",isDockRight(dock));   printf("isBottomt%d",isDockBottom(dock));      return0;}可能对于这个编码风格大家还是相对熟悉一些的,因为在赋值的时候,可能会经常的看到这种按位与运算赋值,

7、因为这个赋值实在是太方便了。关于那个枚举的值为什么这么写呢?因为C语言中通用的内存数据保存的原因,深层次的原因,我就不在此赘述。因为这个太基础了。或许你现在觉得这个玩意还行,但是枚举的值,太难写了。或许,我们可以通过以下写法来让枚举变得相对简单一些typedefenum{   isTop     =0B0001,   isLeft     =0B0010,   isRight   =0B0100,   isBottom   =0B1000}Dock;直接将二进制的数字写到文件里边,Char只有8个bit的还好说一些,但是像int这种有32

8、bit的,早就眼花了把。或许我们可以通过位移来快速方便的解决掉这个问题。方案2最终版#include#defineisDockTop(dock)isDock(dock,isTop)#defineisDockLeft(dock)isDock(dock,isLeft)#defineisDockRight(dock)isDock(dock,isRight)#defineisDockBottom(dock)isDock(dock,isBottom)typedefcharBOOL;typedefenum{   isTop     

9、=1,   isLeft     =1<<1,   isRight   =1<<2,   isBottom   =1<<3}Dock;#defineTrue1#defineFalse0BOOL

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。