我有元素类,它具有以下属性(参见类)。由于两个整数值的范围非常小,我想将它们存储在一个简短的范围内。这对我不起作用。我想使用位移。我在这里做错了什么?这是一个学校作业,所以它必须是一个简短的。
public class Element implements Externalizable {
private static final long serialVersionUID = 6529685098267757690L;
private boolean isMarked;
private boolean isValid;
private boolean isDeleted;
private int key; // VALUE AREA: 0-500
private int value; // VALUE AREA: 1-10
@Override
public void writeExternal(ObjectOutput out) throws IOException {
short val =0;
if(this.isMarked) val|=1;
val <<=1;
if(this.isValid) val|=1;
val <<=1;
if(this.isDeleted) val|=1;
val <<=4;
val |= this.value;
val <<=9;
val |= (short) this.key;
out.writeShort(val);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
short s = in.readShort();
this.isMarked = s % 2==1;
s >>= 1;
this.isValid =s % 2==1;
s >>>= 1;
this.isDeleted = s % 2==1;
s >>>= 4;
this.value = s % 8;
s >>>=9;
this.value = s % 512;
}
@Override
public String toString() {
return "Element{" +
"isMarked=" + isMarked +
", isValid=" + isValid +
", isDeleted=" + isDeleted +
", key=" + key +
", value=" + value +
'}';
}
public Element(boolean isMarked, boolean isValid, boolean isDeleted, int key, int value) {
this.isMarked = isMarked;
this.isValid = isValid;
this.isDeleted = isDeleted;
this.key = key;
this.value = value;
}
public Element(){}
}