【发布时间】:2016-06-25 20:54:49
【问题描述】:
首先,我是个新手,对位操作人员的了解很差,如果我的问题看起来很愚蠢,很抱歉..
所以我的 Android 应用中有 5 个复选框,这些复选框的状态需要与后端同步。但是,我得到一个整数(例如 13),而不是一个具有 5 个具有真/假值的元素的简单 JSON 对象,并且需要发送一个整数来表示所有复选框的状态。 API 文档说明如下:
FromUri Int32 visibility : visibility = "OR" 位运算 以下值无 = 0,NameVisibile = 1 |网络可见 = 2 | 移动可见 = 4 | DOBVisible = 8 |地址可见 = 16
所以我想这意味着如果我检查了 WebVisible、MobileVisible 和 DOBVisible 复选框,我应该执行 2 + 4 + 8 = 14 并发送数字 14 来表示我的复选框的状态?
如果我从 BE 获得一些整数,并且具有相同的逻辑,我应该这样解释吗?
public void test(int value){
if (value >= 16){
addressVisible = true;
value -= 16;
} else {
addressVisible = false;
}
if(value >= 8){
dobVisible = true;
value -= 8;
} else {
dobVisible = false;
}
if(value >= 4){
mobileVisible = true;
value -= 4;
} else {
mobileVisible = false;
}
if(value >= 2){
webVisible = true;
value -= 2;
} else {
webVisible = false;
}
if(value >= 1){
nameVisibile = true;
} else {
nameVisibile = false;
}
}
这是解决此问题的正确方法吗?可能有更多的“智能”方法来使用位运算符来做同样的事情吗?
【问题讨论】:
-
AND 在掩码中更常见:
if (value & 0x10) {}。这样就不需要修改值了,每个测试都是独立的。 -
@njzk2 写的是真的。然而,他报告的声明不是有效的 Java 代码(
int不能被评估为boolean)。因此,正确的声明是if ((value & 0x10) != 0) { ... }
标签: java android bitwise-operators binary-operators