java - 将二进制字符串从 java 转换回有符号整数

标签 java binary parseint radix

我正在使用 java 内置的 Integer.toBinaryString(myInt) 来转换为二进制字符串,然后将该 32 位字符串转换为 8 位字符串。

我的问题在于,当将数字转换回有符号整数时,我丢失了符号。

示例:

我的智力 = -5。

二进制表示 = 11111011。

转换回整数:251。

我的一些代码:

//Converts an integer to 8-bit binary.
public static String convertTo8BitBinary(int myNum){
    String intToConv = Integer.toBinaryString(myNum);
    //the number is less than 8-bits
    if(intToConv.length()<8){
        String append="";
        for(int i = 8 - intToConv.length(); i>0;i--){
            append += "0";
        }
        intToConv = append+intToConv;
    //the number is more than 8 bits
    }else {
        intToConv = intToConv.substring(intToConv.length() - 8, intToConv.length());
    }
    return intToConv;
}

//Converts an 8-bit binary string to an integer.
public static int convertToIntegerFromBinary(String b){
    return Integer.parseInt(b,2);
}

有什么想法可以保留该标志吗? Integer.parseInt(b,2) 不适用于有符号整数吗?是否有适用于签名二进制的基数?

最佳答案

在表示有符号整数时,基 native 器架构会考虑最高位作为符号。当最高位设置为“1”时,则其为负数,否则为正数,更精确的整数而不是数字。在您的情况下,您将考虑 32 位中的至少 8 位。但符号位出现在第 32 位,因此失去了符号

您可以按如下方式进行位与运算: my_32_bit_number & 将其转换为 int (1000 0000 0000 0000 0000 0000 1111 1111) 将为您提供所需的 8 位数字

关于java - 将二进制字符串从 java 转换回有符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802240/

相关文章:

java - 解析子串?

java - 将 2 个微调器与 onItemSelected 一起使用

java - 如何在MainActivity中获取ViewPager创建的fragment的元素?

java - 使用 Objectify 和 RequestFactory 创建具有一对多关系的对象的合适方法是什么?

c++ - Boost二进制序列化问题

javascript - 如何在javascript中通过另一个变量来增加一个变量

java - 线程什么时候共享对象? - java

ios - 如何在 IOS 中将 NString 转换为二进制字符串

c++ - 枚举二进制序列

javascript - JS - 数学不正确