package algorithm;
public class Zigzag {
// 对于所有整数,符号位放最后一位。 整数数值位不变;负数除符号位外,全部取反。
public int int_to_compInt(int n) {
return (n << 1) ^ (n >> 31);
}
//符号位迁移至第一位。正数数值位不变。负数数值位取反。
public int comInt_to_int(int n) {
return (n >>> 1) ^ -(n & 1);
}
public byte[] write_to_buffer(int comInt)
{
int tmp=comInt;
int len=0;
while(tmp!=0)
{
tmp=tmp>>>7;
len++;
}
tmp=comInt;
byte[] buffer=new byte[len];
for (int i=0 ;i< len-1;i++) {
buffer[i]=(byte)((tmp & 0x7f)|0x80);
tmp=tmp>>>7;
}
buffer[len-1]=(byte)(tmp & 0x7f);
return buffer;
}
public int read_from_buffer(byte[] buffer)
{
int result=0;
int len=buffer.length;
for(int i=len-1;i>=0;i--)
{
result=(result<<7)^(buffer[i]&0x7f);
}
return result;
}
public static void main(String[] args)
{
Zigzag zigzag = new Zigzag();
int zigzagInt = zigzag.int_to_compInt(-589);
byte[] comptBytes=zigzag.write_to_buffer(zigzagInt);
int readBytes=zigzag.read_from_buffer(comptBytes);
int ori=zigzag.comInt_to_int(readBytes);
System.out.println(ori);
}
}