计算机组织与结构
主要内容:
32位二进制补码整数与整数型int的互相转化(intToBinary,binaryToInt)。
IEEE类型数据与单精度浮点数float的互相转化(floatToBinary,binaryToFloat)。
BCD码与整数型int的互相转化(NBCDToDecimal,decimalToNBCD)。
知识储备:
方法实现:
代码如下:
package SixWeek;
public class Transformer {
/**
* Integer to BinaryString
*
* @param numStr to be converted
* @return result
*/
public String intToBinary(String numStr) {
//"2"->"00000000000000000000000000000010"
int num = Integer.parseInt(numStr);
if (num == 0) return "00000000000000000000000000000000"; //0单独判读
boolean isNeg = false;//是否需要转换符号
if (num < 0) {
//负数转正数
num = -num;
isNeg = true;
}
StringBuilder temp = new StringBuilder();
while (num > 0) {
//转为二进制
if (num % 2 == 1) temp.append("1");
else temp.append("0");
num /= 2;
}
String ans = temp.reverse().toString(); //反转
int len = ans.length();
for (int i = 0; i < 32 - len; i++) ans = "0" + ans;
if (isNeg) {
//如果是负数那么取反加一
ans = oneAdder(negation(ans)).substring(1);
}
return ans;
}
public String binaryToInt(String binStr) {
return String.valueOf(valueOf(binStr, 2));
}
public String floatToBinary(String floatStr) {
int eLength = 8;
int sLength = 23;
double d = Double.valueOf(floatStr);
boolean isNeg = d < 0;
if (Double.isNaN(d)) {
//Double的自带方法
return "Nan";
}
if(!isFinite(d, eLength, sLength)){
return isNeg ? "-Inf" : "+Inf"; //NaN暂时不考虑
}
StringBuilder answer = new StringBuilder(1+eLength+sLength);
if(isNeg) answer.append("1"); //value is negative, so append sign info
else answer.append("0");
if(d == 0.0) {
for(int i=0;i<eLength+sLength;i++){
//zero representation
answer.append("0");
}
return answer.toString();
} else {
d = Math.abs(d);
int bias = (int)((maxValue(eLength)+1)/2-1); //bias=127 maxValue(eLength)=2^elength-1
boolean subnormal = (d < minNormal(eLength, sLength));//d<2^(-126)
if(subnormal){
for(int i=0;i<eLength;i++){
//指数为全赋值为0
answer.append(