逻辑运算在Unity中的巧妙运用
来源:互联网 发布:苹果软件隐藏桌面图标 编辑:程序博客网 时间:2024/05/16 04:35
事情是这样的,最近呢,我准备学习一下 Unity 中的UI 框架,所以去网上下载了一个 UI 框架,准备来学习学习(文化人的事情怎么能叫抄袭呢!!)。
然后呢,在查看代码的过程中,我发现了这样一堆代码:
// WindowID 是个枚举类型,在这里可以将它当成整型来看待protected bool IsWindowInControl(WindowID id){ int targetId = 1 << ((int)id); return ((managedWindowId & targetId) == targetId);}protected void AddWindowInControl(WindowID id){ int targetId = 1 << ((int)id); managedWindowId |= targetId;}
刚开始看到这段代码我的表情是下面这样的:
机智的喔立马跑去百度了一下位运算符,先简单的介绍下概念:
- << 运算符:将数据左移一位。
- >> 运算符:将数据右移一位。
- & 运算符:按位与,有假则假,全真为真。
- | 运算符:按位或,有真则真,全假为假。
写到这里你可能还不是很明白,木有关系,接下来我们再详细的解释下这几个运算符。
First,我们来看一看 << 运算符,举个栗子先!
int i = 1;i = i << 1;Debug.Log(i);
答案是 2。这是为什么呢,让我们来详细的解剖下解决这题的步骤:
- 第一步,将 1 转换为二进制数, 即 00…001(由于 c# 中 int 是四个字节,而 1 个字节 = 8 位,所以前面应该有 31 个 0)。
- 第二步, 将转换后的每个位上的数字左移一位,空位补 0 ,这样我们就得到运算后的结果:00…010 。
- 第三步, 将我们刚刚得到的数字转换为十进制,我们最后得到的答案为 2。
注意:
1. 在进行位运算时,一定要先将数字转换为二进制!
2. 熟悉二进制和十进制转换的同学,应该很容易就会发现,左移 n 位,就相当于乘以 2^n;右移则相当于除以 2^n;
下面我们用一张图来解释下按位与和按位或:
讲到这里我们再来看看我们一开始贴出来的代码,我们会发现,本来需要一个 List 类型才能解决的问题,我们现在只依靠一个整形就解决了,是不是很神奇呢!?
1 0
- 逻辑运算在Unity中的巧妙运用
- 二进制位运算在算法中的巧妙运用
- tftp在设备升级过程中的巧妙运用
- 2017.8.21-----二分!!!在树状数组中的巧妙运用
- singleNum以及位运算符在编程中的运用(巧妙运用位操作)
- 位逻辑运算的巧妙应用
- 数组的巧妙运用
- WINSCOKET在HTTP中的运用
- JDOM在JAVA中的运用
- 色彩在网页中的运用
- Ajax在WebGIS中的运用
- Log4j在项目中的运用
- XML在JAVA中的运用
- javascript在网页中的运用
- 事务在架构中的运用
- ASIHTTPRequest 在工程中的运用
- 反射在java中的运用
- Python在HiveQL中的运用
- python+appium+ios,遍历真机元素,得到webview
- 二叉搜索树(二叉查找树、二叉排序树)及其实现
- yum install docker报错:Another app is currently holding the yum lock
- Android Studio上传lib到Jcenter(记录)
- docker15个小技巧
- 逻辑运算在Unity中的巧妙运用
- IOC前世今生
- bzoj1090(区间dp,字符串折叠问题)
- JAVA关于数组和二维数组的声明和初始化
- iOS面试题系列之常见算法
- 关于10.11.5之后升级cocoapods时出现以下问题
- bootbox.confirm的用法
- 同步互斥访问 - synchronized关键字
- [Android Studio] Gradle项目中添加JNI生成文件(.so文件)