問題來(lái)源:下位機(jī)數(shù)據(jù)對(duì)接
數(shù)據(jù)庫(kù)的數(shù)據(jù)類型為bigint和無(wú)符號(hào)bigInt分別對(duì)應(yīng)java的Long類型和BigInteger
BigInteger是無(wú)法直接進(jìn)行位運(yùn)算操作的钙态,但是BigInteger的方法可以實(shí)現(xiàn)&的位運(yùn)算操作,代碼貼上
public static void main(String[] args){
// 2^63-1= 9223372036854775807;
BigInteger tempVal = new BigInteger("2049");
BigInteger divide = new BigInteger("2");
BigInteger compareNum=new BigInteger("1");
ArrayList<Byte> ResultArray = new ArrayList<Byte>();
//位遍歷 算出第幾位不為1的編碼
for(Byte i = 0;; i++){
//判斷是否除盡
//BigInteger的equals方法參數(shù)類型為Object菇晃,
//但是這個(gè)類型必須是BigInteger類型才可以比較
if(!tempVal.equals(compareNum)){
//取整數(shù)和余數(shù)
BigInteger[] bigIntegers = tempVal.divideAndRemainder(divide);
if(bigIntegers[1].equals(compareNum)){
ResultArray.add(i);
}
tempVal=bigIntegers[0];
}else{
ResultArray.add(i);
break;
}
}
System.out.println(ArrayUtils.toString(ResultArray));
}