Unity 位运算介绍及使用

介绍

位运算是指对二进制数的位(bit)进行操作的运算符,可以实现一些高效的逻辑和数学运算。Unity中常用的位运算符有以下几种:

与(&):只有两个位都是1,结果才是1;
或(|):只要两个位有一个是1,结果就是1;
非(~):如果位为0,结果是1,如果位为1,结果是0;
异或(^):两个操作数的位中,相同则结果为0,不同则结果为1;
左移(<<):左移表示乘以2,左移多少位表示乘以2的几次幂;
右移(>>):右移表示除以2,右移多少位表示除以2的几次幂;
无符号右移(>>>):无论左侧操作数的类型如何,高顺序空位位置始终设置为零。

测试

二进制:
1010 & 0010 = 0010
1010 | 0010 = 1010
~1010 = 1111111111110101
1010 ^ 0010 = 1000
1010 << 2 = 00101000
1010 >> 2 = 0010

十进制:
10 & 2 = 2
10 | 2 = 10
~10 = -11
10 ^ 2 = 8
10 << 2 = 40
10 >> 2 = 2

使用

位运算的例子有很多,列举一些常见的:

1.判断一个数是否是偶数:可以用 a & 1 == 0 来判断,如果为真,说明 a 的最低位是 0,即 a 是偶数;如果为假,说明 a 的最低位是 1,即 a 是奇数。
2.交换两个数的值:可以用异或运算来实现,例如 a = a ^ b; b = a ^ b; a = a ^ b; 就可以使 a 和 b 的值互换,不需要额外的变量。
3.翻转一个数的某些位:可以用异或运算和掩码来实现,例如 a = a ^ mask; 就可以使 a 和 mask 相同位置的位取反,mask 中为 1 的位表示要翻转的位,为 0 的位表示保持不变。
4.设置一个数的某些位为 1:可以用或运算和掩码来实现,例如 a = a | mask; 就可以使 a 和 mask 相同位置的位为 1,mask 中为 1 的位表示要设置为 1 的位,为 0 的位表示保持不变。
5.清除一个数的某些位为 0:可以用与运算和掩码来实现,例如 a = a & mask; 就可以使 a 和 mask 相同位置的位为 0,mask 中为 0 的位表示要清除为 0 的位,为 1 的位表示保持不变。

Unity中使用

Unity中使用位运算的一个常见场景是处理Layer层。Layer层是用int32来表示的,每一位代表一个层。例如,第0位代表Default层,第8位代表Water层。如果想要设置一个物体或相机只显示或忽略某些层,就可以用位运算符来实现。例如:

LayerMask mask = 1 << 8; //开启Water层
LayerMask mask = 1 << 0 | 1 << 8; //开启Default层和Water层
LayerMask mask = ~ (1 << 8); //关闭Water层
LayerMask mask = ~ (1 << 0 | 1 << 8); //关闭Default层和Water层
camera.cullingMask |= 1 << LayerMask.NameToLayer (“Npc”); //打开Npc层
camera.cullingMask &= ~ (1 << LayerMask.NameToLayer (“Npc”)); //关闭Npc层
camera.cullingMask ^= 1 << LayerMask.NameToLayer (“Npc”); //开关Npc层

其他使用方法

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值