逻辑运算在Unity中的巧妙运用
2016-08-18 09:31
351 查看
事情是这样的,最近呢,我准备学习一下 Unity 中的UI 框架,所以去网上下载了一个 UI 框架,准备来学习学习(文化人的事情怎么能叫抄袭呢!!)。
然后呢,在查看代码的过程中,我发现了这样一堆代码:
刚开始看到这段代码我的表情是下面这样的:
机智的喔立马跑去百度了一下位运算符,先简单的介绍下概念:
<< 运算符:将数据左移一位。
>> 运算符:将数据右移一位。
& 运算符:按位与,有假则假,全真为真。
| 运算符:按位或,有真则真,全假为假。
写到这里你可能还不是很明白,木有关系,接下来我们再详细的解释下这几个运算符。
First,我们来看一看 << 运算符,举个栗子先!
答案是 2。这是为什么呢,让我们来详细的解剖下解决这题的步骤:
第一步,将 1 转换为二进制数, 即 00…001(由于 c# 中 int 是四个字节,而 1 个字节 = 8 位,所以前面应该有 31 个 0)。
第二步, 将转换后的每个位上的数字左移一位,空位补 0 ,这样我们就得到运算后的结果:00…010 。
第三步, 将我们刚刚得到的数字转换为十进制,我们最后得到的答案为 2。
注意:
1. 在进行位运算时,一定要先将数字转换为二进制!
2. 熟悉二进制和十进制转换的同学,应该很容易就会发现,左移 n 位,就相当于乘以 2^n;右移则相当于除以 2^n;
下面我们用一张图来解释下按位与和按位或:
讲到这里我们再来看看我们一开始贴出来的代码,我们会发现,本来需要一个 List 类型才能解决的问题,我们现在只依靠一个整形就解决了,是不是很神奇呢!?
然后呢,在查看代码的过程中,我发现了这样一堆代码:
// 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 类型才能解决的问题,我们现在只依靠一个整形就解决了,是不是很神奇呢!?
相关文章推荐
- 位运算的巧妙运用
- 巧妙运用位运算
- Unity运用Gpu来处理计算和逻辑,加快程序速度
- 位逻辑运算的巧妙应用
- (转)巧妙运用C语言位运算
- [LeetCode 137] Single Number II(位运算的巧妙运用初级篇)
- [算法][LeetCode]Single Number——异或运算的巧妙运用
- 位运算的巧妙运用
- [算法][LeetCode]Single Number——异或运算的巧妙运用
- C语言巧妙运用位运算十进制转化为二进制输出
- (转)C#运用位运算进行权限管理
- 运用PHP位运算做网站权限
- 逻辑运算
- 【计算机视觉】【图像处理】阈值分割---二值图的逻辑运算
- 关于JS的逻辑运算题之if的使用
- 通过SQL Server的位运算功能巧妙解决多选查询方法
- Unity Mathf 数学运算(C#)
- 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
- java逻辑运算
- 数据宽度_逻辑运算