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

丹妮尔_r81

我使用以下方式将16位转换为带符号的十进制:

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

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

北极领主

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

为了使它带符号,我指的是这里讨论的一个简单技巧:将带二进制补码的带符号二进制字符串转换为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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

十进制转换为二进制

将带符号的二进制转换为十进制,八进制和十六进制

在Java中将十进制转换为二进制

如何在Swift中将十进制数转换为二进制?

将原始的14位二进制补码转换为带符号的16位整数

在Python中将二进制表示形式转换为带符号的64位整数

十进制数转换为16位二进制(C)

Java从十进制转换为8位二进制

从十进制转换为最多n位的二进制数字

在Python中将十进制数转换为二进制的简单函数

将整数转换为带符号的2的补码二进制字符串

JavaScript-以字符串形式将十进制数转换为4位二进制数

在Python 3中将十进制数转换为二进制数

将十进制数7710转换为8位二进制补码

将二进制转换为带符号的十进制

在Java中将大二进制字符串转换为十进制

在Java意外输出中将二进制/十进制小数转换为十六进制

在MATLAB中将十进制整数转换为二进制(最多20位)的自定义函数

如何将带符号的十进制转换为十六进制的24位二进制补码带符号数

将1和0的32位二进制字符串转换为SQL Server中的带符号十进制数

如何从8位带符号二进制数中得到一个负的十进制值?

在Python中将32位二进制数字转换为十进制

将定点算术(带位编号)的二进制补码转换为十进制数

将计算出的十进制数转换为 8 位二进制数

如何将十进制值转换为二进制位?

如何使用二进制补码手动将十六进制转换为十进制

在C中将十进制数转换为十亿进制数的二进制数

在python中将32位二进制转换为十进制

在python中将二进制数(由符号、尾数和指数组成)转换为十进制数