java - java类Pattern中的位运算符逻辑
问题描述
在 java.regex.Pattern 中有以下声明:
public final class Pattern implements java.io.Serializable {
...
private static final int UNIX_LINES = 0x01;
private static final int CASE_INSENSITIVE = 0x02;
private static final int COMMENTS = 0x04;
private static final int MULTILINE = 0x08;
private static final int LITERAL = 0x10;
private static final int DOTALL = 0x20;
private static final int UNICODE_CASE = 0x40;
private static final int CANON_EQ = 0x80;
private static final int UNICODE_CHARACTER_CLASS = 0x100;
private Pattern(String p, int f) {
if ((f & ~ALL_FLAGS) != 0) {
throw new IllegalArgumentException("Unknown flag 0x"
+ Integer.toHexString(f));
}
...
}
我试图了解检查是否存在未知标志的逻辑。
作为十六进制字符串
ALL_FLAGS => 00000000000000000000000111111111
~ALL_FLAGS => 11111111111111111111111000000000
现在,如果我使用标志 0x03(不应该被允许),那么
0x03 & ~ALL_FLAGS => 00000000000000000000000000000000
因此,尽管未定义,但也允许使用该标志。只有标志 > 511 是不允许的。
这种逻辑背后的原因是什么?
解决方案
感谢您的评论。“位掩码”是要搜索的术语。在这里找到了一个很好的解释
推荐阅读
- python - 根据键更新嵌套字典中的值
- quarkus - 在 Java 16 下构建原生 Quarkus 镜像?
- android - 在 iOS 发布配置中反应原生自定义地图标记问题
- go - go-restful-openapi $refs must reference a valid location in the document
- video - iOS WKWebView 视频自动播放
- python - 如何使用鼻子测试获得测试覆盖率报告?
- flutter - 我可以在本地化的 Flutter 应用程序中设置文本样式吗?
- python - How to filter out data in a column using pandas DF
- vue.js - Vue.js v3 通过路由器链接传递数据
- python - Postgresql 中的对角线查询