您的位置:首页 > 移动开发 > Unity3D

逻辑运算在Unity中的巧妙运用

2016-08-18 09:31 351 查看
事情是这样的,最近呢,我准备学习一下 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 类型才能解决的问题,我们现在只依靠一个整形就解决了,是不是很神奇呢!?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity c#