使用位运算可以大大提升代码运行效率,这里通过Unreal记录一下使用位运算把unit8作为一连串Bool功能使用。新建一个继承自AActor的C++类CustomActor,并声明一个unit8类型的变量BytesBool:
![](https://i-blog.csdnimg.cn/blog_migrate/f0c8f422fb10c6bac3144430d4cc27fa.png)
主要思路是通过不同位上的值是否为1来替代true和false,实现两个方法:Get和Set:
![](https://i-blog.csdnimg.cn/blog_migrate/51884ee37cddcc30e402ab5c374a5e75.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e373b43bb078137b8261a491e905891a.png)
设置第Index位为true:
把Index位上的值改为1,把1左移Index位,得到类似0100的数值,和原来的数值进行或运算,实现把Index位数值和1进行或运算后变为1,其他位和0进行或运算后不变。
设置第Index为false:
把Index位上的值改为0,,把1左移Index位,得到类似0100的数值,取反后得到1011,和原来的数值进行与运算,实现把Index位数值和0进行与运算后变为0,其他位和1进行与运算后不变。
获取第Index位是true还是false:
如果相应位置的数值为1,则为true;否则为false。原来的数值右移Index位,得到类似0001的数值,把Index位的数值移动到最末位,然后判断此数值是否为1。
暴露测试函数在蓝图中使用:
![](https://i-blog.csdnimg.cn/blog_migrate/47a2acbea10def5ba8fc86e5042acfb5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fe6ba7cd044bd554f1c0b73fff417db7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/53caad584f07a4583cc7c3cbf19c7342.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5d67ad537e858c8149afac914d3f0839.png)
测试结果一切正常:
![](https://i-blog.csdnimg.cn/blog_migrate/7963eee3da257e8a1c8de4e081ea8463.png)