public static void main(String[] args) {
0xFF9B (十六进制)= -101 => 温度 = -10.1℃
String binary = add(InvertedCode(Integer.toBinaryString(250 )),"1" ) ;
System.out.println(binary);
System.out.println(Integer.parseInt (binary,2) );
;
}
/**
* 反码
*String s="00000101"
*结果 11111010
*/
public static String InvertedCode(String s){
StringBuilder sr = new StringBuilder(s);
for (int i = 0; i < sr.length(); i++) {
if (sr.substring(i,i+1).equals("0")){
sr.replace(i,i+1,"1");
}else{
sr.replace(i,i+1,"0");
}
}
return sr.toString();
}
public static String add(String a,String b){
StringBuilder sb=new StringBuilder();
int x=0;
int y=0;
int pre=0;//进位
int sum=0;//存储进位和另两个位的和
while(a.length()!=b.length()){//将两个二进制的数位数补齐,在短的前面添0
if(a.length()>b.length()){
b="0"+b;
}else{
a="0"+a;
}
}
for(int i=a.length()-1;i>=0;i--){
x=a.charAt(i)-'0';
y=b.charAt(i)-'0';
sum=x+y+pre;//从低位做加法
if(sum>=2){
pre=1;//进位
sb.append(sum-2);
}else{
pre=0;
sb.append(sum);
}
}
if(pre==1){
sb.append("1");
}
return sb.reverse().toString();//翻转返回
}
/**
* 补码
* String st="11111010"
* 结果 11111011
*/
public static String Complement(String st) {
StringBuilder sr = new StringBuilder(st);
if (st.substring(st.length() - 1).equals("0")) {
sr.replace(st.length() - 1, st.length(), "1");
return sr.toString();
} else {
sr.replace(st.length() - 1, st.length(), "0");
for (int i = st.length() - 1; i > 0; i--) {
if (st.substring(i - 1, i).equals("0")) {
sr.replace(i - 1, i, "1");
return sr.toString();
} else {
sr.replace(i - 1, i, "0");
}
}
return sr.toString();
}
}