xid = (b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3];

xidはint、bはbyte[]

として作ったxidを復元したいのですが、

dat[0] = (byte)((xid & 0xFF000000) >> 24);
dat[1] = (byte)((xid & 0x00FF0000) >> 16);
dat[2] = (byte)((xid & 0x0000FF00) >> 8);
dat[3] = (byte)(xid & 0x000000FF);


では値が変わってしまいます。
変なところがあれば指摘して頂きたいのですが。