public class BinaryToSigned {
public static void main(String[] args) {
String a = SystemUtil.hexString2binaryString("ffffff2a");
String oppositeCode = ORGBinToDec("11100110",true);
String oppositeCode2 = AddBinToDec("11100110",true);
System.out.println(ORGBinToDec(a,true));
System.out.println(AddBinToDec(a,true));
}
public static String ORGBinToDec(String binaryStr, boolean includeSymbol) {
String result = "";
if (includeSymbol && binaryStr.charAt(0) == '1') {
result = "-"+Integer.parseInt(binaryStr.substring(1), 2);
} else {
int i = Integer.parseInt(binaryStr, 2);
result = String.valueOf(i);
}
return result;
}
public static String AddBinToDec(String binaryStr, boolean includeSymbol) {
String result = "";
if (includeSymbol && binaryStr.charAt(0) == '1') {
result = negativeBinToDec(binaryStr);
} else {
int i = Integer.parseInt(binaryStr, 2);
result = String.valueOf(i);
}
return result;
}
public static String negativeBinToDec(String binaryStr) {
String oppositeCode = getOppositeCode(binaryStr);
String negateBinary = getNegate(oppositeCode);
String result = "-"+Integer.parseInt(negateBinary, 2);
return result;
}
public static String getOppositeCode(String binaryStr) {
int down = 0;
int len = binaryStr.length();
StringBuffer oppositeCode = new StringBuffer();
if (binaryStr.charAt(len - 1) == '1') {
oppositeCode = oppositeCode.append(binaryStr.substring(0, len - 1) + "0");
return oppositeCode.toString();
}
for (int i = len - 1; i >= 0; i--) {
if (i == len - 1) {
oppositeCode.append(1);
down = 1;
continue;
}
int c = binaryStr.charAt(i);
c =Character.getNumericValue(c);
int m = c - down;
if (m == 0) {
oppositeCode.append(0);
down = 0;
continue;
}
if (m == -1) {
oppositeCode.append(1);
down = 1;
continue;
}
if (m == 1) {
oppositeCode.append(1);
down = 0;
continue;
}
}
return oppositeCode.reverse().toString();
}
public static String getNegate(String binaryStr){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < binaryStr.length() ; i++){
if (binaryStr.charAt(i) == '0'){
sb.append('1');
}else {
sb.append('0');
}
}
return sb.toString();
}
}