【发布时间】:2021-07-23 12:20:21
【问题描述】:
在代码中发现了该逻辑,但不知道其背后的原因;为什么使用它而不是分配普通的int?
(它是 3D 环境中的角色控制器)
// assumes we're not blocked
int blocked = 0x00;
if ( its_a_floor )
blocked |= 0x01;
if ( its_a_wall )
blocked |= 0x02;
【问题讨论】:
-
更容易使用:这样想。如果您需要提取我们是否在场的信息,请使用
blocked & 0x01。如果你想看看我们是否在墙旁边,我们采取blocked & 0x02。如果我们都想要blocked & 0x03。我们也可以在这个里面添加其他的状态,并且包装的很整齐 -
按原样,毫无意义。如果你碰巧碰到两位数或三位数,0x101 比 257 更能说明二进制表示。
-
节省空间。如果空间不是问题,那么您可以有几个标志,
blockedByFloor和blockedByWall。有些人喜欢使用 int 中的位。它让程序员的生活更有趣。 -
在 CPU 上也更快? (基本上我得到的是,它是一种在位级别打包信息的经济方式,直接将其解包为最小值)
-
“为什么使用它而不是分配普通的int?”是什么意思??你的意思是代替
blocked = 0x01和blocked = 0x02?所以基本上为什么作者使用|=而不是=?
标签: c++ bitwise-or