有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java类模式中的位运算符逻辑

在java中。正则表达式。模式有以下声明:

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将不被允许

这种逻辑背后的原因是什么


共 (1) 个答案

  1. # 1 楼答案

    谢谢你的评论。“比特面具”是一个搜索词。找到了一个很好的解释here