java 二进制与十进制互相转换(支持负数)
1.情景展示
java二进制如何转成十进制?
十进制如何转换成二进制?
2.具体分析
二进制:用0和1表示(最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小);
十进制:10个阿拉伯数字(0~9)共计10个数字表示。
3.解决方案
二进制转十进制
/*
* 二进制转十进制(支持用负数表示的二进制)
* @description:
* @date: 2022/4/1 14:47
* @param: binary 二进制
* @return: java.lang.Integer 十进制
*/
@Nullable
public static Integer toDecimal(String binary) {
if (StringUtils.isEmpty(binary)) return null;
int i = new BigInteger(binary, 2).intValue();
// 如果int不够用(>32位),可以换成long(64位)
// Long l = new BigInteger(binary, 2).longValue();
log.debug("二进制转十进制:\n{}", i);
return i;
}
十进制转二进制
/*
* 十进制转二进制
* @description:
* 1.所谓原码就是二进制定点表示法,即:最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
* 2.反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
* 3.补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
* int:在java当中的存储范围是32位;
* long:在java当中的存储范围是64位;
* byte 1个字节
* short 2个字节
* int 4个字节
* long 8个字节
* @date: 2022/4/1 14:40
* @param: i
* 如果你的number是正整数,则会自动转化为普通的原码;
* 若是number是负数,则会转化为补码。
* @return: java.lang.String
*/
@NotNull
public static String fromDecimal(Integer i) {
if (i == null) return "";
String binaryString = Integer.toBinaryString(i);
// 如果int不够用(>32位),可以换成long(64位)
// String binaryString = Long.toBinaryString(i);
log.debug("十进制转二进制:\n{}", binaryString);
return binaryString;
}
测试
toDecimal(fromDecimal(-115));
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/16104963.html