逻辑运算在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 = 1i = 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