日期:2014-05-18 浏览次数:20761 次
package com.zf.maven.test;
import java.math.BigInteger;
/**
*/
public class Test02 {
public static void main(String[] args) {
String e = _10_2(46018 ,32);
System.out.println("46018转换为二进制:" + e);
e = e.substring(16);
System.out.println("因为sort为2个字节 也就是16位的,所以取16位得到:" + e);
System.out.println("接下来就将二进制转换为十进制");
System.out.println("可以看到最高位(符号位)为1 ,为负数 。将负二进制数转换为十进制的步骤为 1、取反 2、加1 3、转换为十进制 4、还原符号");
String f = e.replace("0", "x")
.replace("1", "0")
.replace("x", "1");
System.out.println("首先需要取反得到:" + f);
f = eadd(f);
System.out.println("然后让取反的结果加上1,得到:" + f);
int result = _2_10(f);
System.out.println("将"+ f +"转换为十进制的结果为:" + result);
System.out.println("然后要恢复原来的符号,在前面加上负号,最终的到的结果为:-" + result);
}
/**
* 二进制转换为10进制
* @param e
* @return
*/
public static int _2_10(String e){
int result = 0 ;
StringBuilder sb = new StringBuilder(e);
sb.reverse();
for (int i = 0 ; i < sb.length() ; i++) {
if(sb.charAt(i) == '1'){
result += cf(i);
}else{
result += 0 * cf(i);
}
}
return result ;
}
/**
* 将十进制数字转换为二进制格式
* @param t 十进制数字
* @param bits 位数
* @return
*/
public static String _10_2(int t , int bits){
StringBuilder sb = new StringBuilder() ;
while(t != 0){
if(t % 2 != 0)
sb.append(1);
else
sb.append(0);
t /= 2;
}
sb.reverse() ;
return String.format("%0"+ bits +"d",
new BigInteger(sb.toString()));
}
/**
* 二进制数加1
* @param s
* @return
*/
public static Stri