在设置某些属性时,竖线 (|) 运算符如何在 Android 中工作?
How does the pipe (|) operator work in Android while setting some properties?
我的问题可能很基础,但我想知道管道运算符在 Android 中的以下上下文中如何工作:
我们可以在布局中设置多种输入类型:
android:inputType = "textAutoCorrect|textAutoComplete"
我们可以为一个意图设置多个标志,如下所示:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_ACTIVITY_CLEAR_TOP);
我们还可以设置一些属性如下:
tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
我们可以在 Android.
中看到这样的例子。
所以我的问题是,|
运算符是像按位或运算符一样工作,还是只是连接结果或其他东西?
如果它的行为类似于按位或运算符,那么它如何使预期结果正确呢?有谁能给我讲讲吗?
java中的管道是按位或。
在某些 Android 属性中使用它时,它在概念上会做同样的事情。
这是添加了管道分隔的选项。
是的,它是一个bitwise inclusive OR
操作,主要用于设置标志(documentation)。考虑以下标志:
byte flagA = 0b00000001;
byte flagB = 0b00000100;
如果我们使用 |
运算符,这两个标志将组合在一起:
byte flags = flagA | flagB; // = 0b00000101
这允许我们在少量内存中设置属性或其他少量状态信息(通常是具有最多 Android 标志的整数)。
请注意,标志应该只有一位 "active",即值等于 2^n。当我们使用 bitwise AND
运算符检查组合标志持有者变量时,这就是我们知道设置了哪些标志的方式,例如
if ((flags & flagA) == flagA) {
// Flag A has been set
...
}
我的问题可能很基础,但我想知道管道运算符在 Android 中的以下上下文中如何工作:
我们可以在布局中设置多种输入类型:
android:inputType = "textAutoCorrect|textAutoComplete"
我们可以为一个意图设置多个标志,如下所示:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_ACTIVITY_CLEAR_TOP);
我们还可以设置一些属性如下:
tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
我们可以在 Android.
中看到这样的例子。所以我的问题是,|
运算符是像按位或运算符一样工作,还是只是连接结果或其他东西?
如果它的行为类似于按位或运算符,那么它如何使预期结果正确呢?有谁能给我讲讲吗?
java中的管道是按位或。
在某些 Android 属性中使用它时,它在概念上会做同样的事情。
这是添加了管道分隔的选项。
是的,它是一个bitwise inclusive OR
操作,主要用于设置标志(documentation)。考虑以下标志:
byte flagA = 0b00000001;
byte flagB = 0b00000100;
如果我们使用 |
运算符,这两个标志将组合在一起:
byte flags = flagA | flagB; // = 0b00000101
这允许我们在少量内存中设置属性或其他少量状态信息(通常是具有最多 Android 标志的整数)。
请注意,标志应该只有一位 "active",即值等于 2^n。当我们使用 bitwise AND
运算符检查组合标志持有者变量时,这就是我们知道设置了哪些标志的方式,例如
if ((flags & flagA) == flagA) {
// Flag A has been set
...
}