
java二进制转有符号整数
我有一个表示二进制数的字符串,想在Java程序中把它转换成对应的有符号整数,应该怎么做?
使用Java内置方法转换二进制字符串为有符号整数
可以使用Java的Integer.parseInt方法,传入二进制字符串和基数2,将其转换成对应的整数。例如:
int num = Integer.parseInt(binaryString, 2);
这样得到的num就是对应的有符号整数。如果二进制表示负数,确保二进制字符串长度和整数类型的位数匹配,比如32位。
我在Java中将二进制负数(例如补码形式)转换为int时,结果好像没有正确显示负数,应该如何正确处理符号位?
通过手动解析或位操作完成符号扩展
因为Integer.parseInt会将二进制字符串当作无符号数处理,所以如果需要解析的是补码形式的负数,且二进制长度不足32位,可以先判断最高位是否为1,然后进行符号扩展。例如,将短二进制补码字符串扩展为32位后再解析,或者先用Long.parseLong后强制类型转换为int。这样可以保证负数符号位被正确解析。
我的二进制字符串长度可能不固定,有时候超过32位,使用标准的解析方法不生效,有什么方法实现任意长度二进制字符串转换为有符号整数?
借助BigInteger完成大于32位的有符号二进制转换
Java的BigInteger类支持任意长度的二进制转换,可以使用构造函数new BigInteger(String val, int radix)实现二进制字符串转整数,且支持负数。例如:
BigInteger bigInt = new BigInteger(binaryString, 2);
如果二进制表示的是补码,并且最高位为1,BigInteger会自动识别为负数。这样可以方便地处理长度超过int范围的二进制数据。