关于字符串二进制定点数浮点数与int以及NBCD码转换的问题(代码)
- 将十进制数字字符串转化为二进制补码(32位):
public String intToBinary(String numStr) {
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;
}
进位判断(第一位判断是否溢出)
private String oneAdder(String operand) {
int len = operand.length();
StringBuffer temp = new StringBuffer(operand);
temp = temp.reverse();//只是将位反转,因为要从低位到高位加一
int[] num = new int[len];
for (int i = 0; i < len; i++) num[i] = temp.charAt(i) - '0'; // 先转化为反转后对应的int数组
int bit = 0x0;
int carry = 0x1;
char[] res = new char[len];
for (int i = 0; i < len; i++) {
bit = num[i] ^ carry;
carry = num[i] & carry;
res[i] = (char) ('0' + bit); // 显示转化为char
}
String result = new StringBuffer(new String(res)).reverse