在 Java 中将 24 位二进制补码转换为有符号十进制数



我使用以下方法将16位转换为有符号小数:

(short) Integer.parseInt("1110111100001010", 2))

问题是我有24位要转换成有符号的十进制。

使用没有大小限制的BigInteger。意味着无论二进制字符串有多大,都不会丢失任何数据。

为了让它签名,我指的是这里讨论的一个简单技巧:正在将带符号的二进制字符串转换为两个';s对int的补码?

这里有两种方法:一种用于int,另一种用于BigInt

public static String generateKString(String binary){
    // k is the smallest positive number the actual binary scheme cannot represent
    // for 1101 it is 1000
    String kStr = "1";
    for(int i = 1; i < binary.length(); i++)
        kStr += "0";
    return kStr;
}
public static BigInteger convertSignedBigInt(String binary){
    BigInteger bInt = new BigInteger(binary, 2);        
    String kStr = generateKString(binary);      
    BigInteger k = new BigInteger(kStr, 2);     
    if (bInt.compareTo(k) == 1) bInt = bInt.subtract(k.multiply(new BigInteger("2")));
    return bInt;
}
public static int convertSignedInt(String binary){
    int i = Integer.parseInt(binary, 2);
    String kStr = generateKString(binary);
    int k =  Integer.parseInt(kStr, 2);
    if (i >= k) i -= 2 * k;
    return i;
}