I have the class Element, which has the following attributes (see class). Since the range of the two integer values are very small, I want to store them in a short. This does not work for me. I want to work with the bitshifting. What am I doing wrong here? It is a school assignment, so it must be a short.
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(){}
}