我试图通过在数字字段中保存布尔数据来简化我的数据库,现在我这样做是为了打开和关闭一点。
int turnBit(int input, int bit, boolean value){
if(value){
input = input | (1<<bit);
}else{
input = input | (1<<bit);
input = input ^ (1<<bit);
}
return input;
}
有没有办法关闭这个位而不打开它?
答案 0 :(得分:3)
input = input & ~(1 << bit)
答案 1 :(得分:3)
您正在使用按位'或'运算符来打开一位,这是正确的:
0001 | 0010 results in 0011
您可以使用按位'和'功能关闭一点:
1101 & 1110 results in 1100
因此,要关闭一个值的某个位,您可以创建一个“位掩码”,其中包含您不关心的所有位设置为1,并且您要关闭的位设置为0;这将“关闭”该值中的那一点。
如果你有一个用于打开特定位的掩码 - 也就是说,你想要改变的每个位置都有一个0而你想要改变的位置是1,你可以将它转换为通过应用java的按位'not'运算符(〜)来“关闭”位掩码,即〜0010结果为1101。