-3
A
回答
2
可以使用bitwise AND operator (&
),像这样:
if ((flag & 0x08) == 0x08) {
// They have it
}
(0x08的十六进制= 1000二进制= 8小数。)
&
取操作数和还给仅包含所设置的位的值在操作数的均为(将操作数转换为标准2的补码32位整数后)。因此0x0C & 0x08
是0x08
,因为0x08
位设置在两个操作数中,但(比如说)0x07 & 0x08
是0x00
,因为其中一个操作数没有设置位。
如果你检查你知道值只包含一个位(如0x08
),你实际上并不需要== 0x08
的一部分,这是好的:
if (flag & 0x08) {
// They have it
}
但如果您曾戴过口罩,则需要检查多个位,例如0x0A
,则需要==
,否则结果将是0x08
或0x02
以及0x0A
。所以使用(thingToTest & flagToTestFor) == flagToTestFor
这样的模式是一个很好的习惯。
你不必使用十六进制,但是在使用位时我发现它很方便(因为JavaScript没有文字二进制表示法)。或者你可以考虑一些“常数”(这真的可以在ES6常量,但现在我们将与ES5棒),你在声明你的代码的开头:
var CREATE_FLAG = parseInt("1000", 2);
var READ_FLAG = parseInt("0100", 2);
var UPDATE_FLAG = parseInt("0010", 2);
var DELETE_FLAG = parseInt("0001", 2);
...然后你可以做if ((flag & CREATE_FLAG) == CREATE_FLAG)
。
相关问题
- 1. 检查权限
- 2. 如何用opencart版本2.2.0.0取代英格兰国旗与法国国旗
- 3. 如何检查片段中的权限
- 4. Android检查权限
- 5. 如何检查SharePoint文档权限?
- 6. Ant Build-Script如何检查root权限
- 7. 在ViewModel中如何检查权限?
- 8. 如何检查管理员权限C#
- 9. 检查Facebook上的权限
- 10. 大会SF国旗
- 11. 如何实施“报告/国旗评论”
- 12. 带国旗的Html国家列表
- 13. 关于ev_default_fork的libev国旗
- 14. 如何用angularjs中的国旗获取国名
- 15. Android Marshmallow检查权限
- 16. 静态检查rest_framework权限
- 17. 检查权限请求
- 18. 检查文件权限
- 19. 在HDFS中检查权限
- 20. 检查文件权限
- 21. 检查旗帜加载
- 22. 位置权限检查和授权
- 23. Python/Django从IP获得国家国旗
- 24. Rails 3美国国旗宝石?
- 25. 美国国旗排序优化
- 26. 在objective-c中扫描国家国旗
- 27. 检查,如果权限已被Android中
- 28. 国旗从未初始化
- 29. 上[授权(角色)]使用枚举[国旗]和位运算符
- 30. Makefile:检查对目录的写权限