10進数は2進数と16進数に変換します.
public class Main4{
public static void main(String[] args)
{
Main4 solution = new Main4();
// "0000000000001111,000F"
System.out.println(solution.changeFormatNumber("15"));
// "1111111111111111,FFFF"
System.out.println(solution.changeFormatNumber("-1"));
int num=(int)Math.pow(2, 15)-1;
System.out.println(num);
System.out.println(solution.changeFormatNumber(String.valueOf(num)));
num=-(int)Math.pow(2, 15);
System.out.println(num);
System.out.println(solution.changeFormatNumber(String.valueOf(num)));
num=(int)Math.pow(2, 15)+3;
System.out.println(num);
System.out.println(solution.changeFormatNumber(String.valueOf(num)));
System.out.println(solution.changeFormatNumber("abc"));
}
/**
*
* @param number string
* @return string
*/
public String changeFormatNumber (String number) {
try
{
char[] chars=new char[16];
// num
int num = 0;
boolean isPlus = true;
if(number.charAt(0)=='-'){
isPlus=false;
number=number.substring(1);
}
num=Integer.valueOf(number);
if(isPlus){
if(num>32767){
return "NODATA";
}
}else{
if(num>32768){
return "NODATA";
}
}
for(int i=0;i<16;i++){
int now=num&1;
if(now==0){
chars[15-i]='0';
}else{
chars[15-i]='1';
}
num=num>>1;
}
String binary = new String(chars);
if(!isPlus){
binary=changePlusToMinus(binary);
}
return binary+","+getHexByBinaryNumber(binary);
} catch (Exception e)
{
return "INPUTERROR";
}
}
/** 16 2 16 2 , , 1111111111111111-number+1
* @param number
* @return
*/
public String changePlusToMinus(String number){
char[] chars=number.toCharArray();
// 1111111111111111-number
for(int i=0;i<16;i++){
if(chars[i]=='1'){
chars[i]='0';
}else{
chars[i]='1';
}
}
// +1 , 0, 1, 0
// ,1 0, 0 1,
for(int i=15;i>=0;i--){
if(chars[i]=='1'){
chars[i]='0';
}else{
chars[i]='1';
break;
}
}
return new String(chars);
}
public Map map=new HashMap();
{
map.put("0000", "0");
map.put("0001", "1");
map.put("0010", "2");
map.put("0011", "3");
map.put("0100", "4");
map.put("0101", "5");
map.put("0110", "6");
map.put("0111", "7");
map.put("1000", "8");
map.put("1001", "9");
map.put("1010", "A");
map.put("1011", "B");
map.put("1100", "C");
map.put("1101", "D");
map.put("1110", "E");
map.put("1111", "F");
}
/** 16 4
* @param binaryNumber
* @return
*/
public String getHexByBinaryNumber(String binaryNumber){
StringBuilder builder=new StringBuilder();
for(int i=0;i<16;i=i+4){
builder.append(map.get(binaryNumber.substring(i, i+4)));
}
return builder.toString();
}
}
0000000000001111,000F
1111111111111111,FFFF
32767
0111111111111111,7FFF
-32768
1000000000000000,8000
32771
NODATA
INPUTERROR
10進数は16桁の2進数と4桁の16進数になります.最初の10進数は正数の2進数になり、次に負の数なら、補数=逆符号+1で負の数に対応する2進数を生成します.
2進数を16進数に変え、4つの数字を1組にし、hashmapから16進数にします.