在 C# 中移除标记
在 C# 中使用二进制操作有时会让人感觉不知所措,但了解如何高效地操作标志是开发人员的一项基本技能。 在本文中,我们将探讨 Tim Corey 在其视频 "C#中的二进制 "中解释的 C# 中移除标志的过程:在 10 分钟或更短时间内移除标记"。 Tim 清楚地介绍了如何使用位操作从标记系统中删除权限。 让我们一步步深入他的解释。
移除标记简介
Tim 在视频的开头继续讲述他对 C# 中二进制操作的理解系列。 在第十二课中,他将重点介绍如何在十分钟内从一组权限中移除标记。 他保留了上一课中使用枚举分配权限的代码。 本环节的目标是演示如何从指定集合中删除特定权限。
确定要移除的标志
在演示开始时,Tim 讨论了这样一个场景:需要从分配给用户的一组权限中删除一个权限,特别是 "Redis"。 他解释说,权限是以二进制格式存储的,其中每个比特代表不同的权限。
挑战在于删除 "Redis "权限的同时不影响该权限集中的其他权限。 Tim 指出,第三位(假设基于零的索引)代表 "Redis",需要清除。
使用位操作删除标志
Tim 提醒观众注意位操作掩码和 NOT (~) 操作符。 为了去除标记,他采用了以下方法:
// Remove the Redis permission from TimPermissions
TimPermissions = TimPermissions & ~SystemPermissions.Redis;// Remove the Redis permission from TimPermissions
TimPermissions = TimPermissions & ~SystemPermissions.Redis;他解释了这一操作的每个部分:
SystemPermissions.Redis提供了'Redis'的标志值。~SystemPermissions.Redis反转位,将'Redis'位从1变为0,其他位则变为1。TimPermissions & ~SystemPermissions.Redis进行TimPermissions与反转掩码的按位与操作,有效地清除了'Redis'位,而保留了其他位。
这种方法可确保在删除目标权限的同时,不会无意中修改标志的其余部分。
打印更新的权限
在应用了按位操作后,Tim输出了TimPermissions的更新值。 他确认代表 "Redis "的第三个位已被成功删除。 这证明了该方法的正确性。
移除标志的更简便方法
然后,Tim 介绍了操作的速记版本:
// Shorthand operation to remove the Redis permission
TimPermissions &= ~SystemPermissions.Redis;// Shorthand operation to remove the Redis permission
TimPermissions &= ~SystemPermissions.Redis;他解释说,使用&=只是表达相同逻辑的一种更简洁的方式,使代码更干净,同时保持相同的效果。 他强调,了解长短两种版本有助于理解 C# 中位运算的工作原理。
了解位操作的重要性
蒂姆承认,使用二进制和比特运算可能具有挑战性,他说:"是的,再次使用二进制有时会烧坏你的大脑,这没关系。他向观众保证,掌握这些概念需要时间和练习。
他的建议是先学习每个按位操作符——与(&),或(|), and NOT (~)——然后再将它们组合成更复杂的操作。 了解这些工具如何单独工作,有助于开发人员掌握它们在一起使用时的交互方式。
此技术为何重要
Tim 强调,使用位操作移除标志不仅限于权限处理。 他提供了一个游戏开发场景的例子,其中一个实体可以有多个状态作为标志存储。 使用这种技术,开发人员可以有效地切换状态,而无需进行不必要的计算。
他还强调,与其他管理多状态的方法相比,使用位操作具有很高的性能。 由于这些操作是在二进制级别执行的,因此与维护单独的布尔属性等替代方法相比,它们更快、更节省内存。
最后的想法
Tim 最后强调了练习这些操作的重要性,直到它们成为第二天性。 他鼓励观众不要只是死记硬背语法,而是要努力深入理解这些技术的工作原理。
"开始是一种规则,然后变成一种理解"。- 蒂姆-科里
通过不断学习这些概念,开发人员将增强在 C# 中操作二进制标志的信心,从而更熟练地编写高效、可维护的代码。
结论
通过 Tim Corey 条理清晰的讲解,我们学会了如何在 C# 中使用位操作移除标志。 他的方法是分解每个步骤,同时演示操作的长版本和短版本,并加强实践的重要性,这使本书成为使用二进制操作的开发人员的宝贵课程。
如果您有兴趣了解有关 C# 中二进制操作的更多信息,请务必查看 Tim 有关该主题的 完整系列,以获得更深入的见解!

