-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDecToBinToHex.java
More file actions
130 lines (100 loc) · 3.48 KB
/
DecToBinToHex.java
File metadata and controls
130 lines (100 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class DecToBinToHex
{
/******DRIVER CODE********/
public static void main(String[] args)
{
System.out.println("===============================================================================================");
System.out.printf("%12s %34s %36s %n","Decimal(Base 10)","Binary(Base2)","Hexadecimal(Base16)");
System.out.println("===============================================================================================");
List<Integer>returnedBinaryStream = new ArrayList<Integer>();
int counter =0; //loop from 0 to 256 while generating binary and hex equivalents automatically
while(counter<=256)
{
returnedBinaryStream = convertToBinary(counter);
String returnedHexadecimalStream = convertToHexadecimal(counter);
System.out.printf("%12s %37s %30s %n",counter,groupFourBits(returnedBinaryStream),returnedHexadecimalStream);
System.out.println("_______________________________________________________________________________________________");
counter ++;
}
}
/*FUNCTION TO CONVERT DECIMAL NUMBER TO BINARY EQUIVALENT.IMPLEMENTED USING STACK AND LISTS*/
public static List<Integer> convertToBinary(int decimalNumber)
{
int remainder =0;
Stack <Integer>stack = new Stack<Integer>();
List<Integer> listOfRemainders = new ArrayList<Integer>();
if(decimalNumber == 0) //if the number is zero we return the result
{
for(int j=0;j<4;j++)
{
stack.push(0);
}
}
while(decimalNumber > 0) // if number greater than zero then continue dividing by 2 while keeping track of the remainders
{
remainder = decimalNumber % 2;
stack.push(remainder);
decimalNumber/=2;
}
int numberOfBits = stack.size();
while(numberOfBits%4!=0) //this will achieve the grouping into blocks of 4 bits in the output
{
stack.push(0);
numberOfBits ++;
if(numberOfBits %4 ==0)
{
break;
}
}
while(!stack.isEmpty())
{
Integer storePoppedElement = stack.pop();
listOfRemainders.add(storePoppedElement); // returns final output list read from the most significant bit(falls at top of the stack)
}
return listOfRemainders;
}
public static String groupFourBits(List<Integer> list) // To keep a gap on every 4 bits
{
String holdFourBits="";
int count =0;
for(int i: list)
{
holdFourBits+=i;
count ++;
if(count%4==0)
{
holdFourBits+=" ";
}
}
return holdFourBits;
}
//FUNCTION TO CONVERT DECIMAL NUMBER TO HEXADECIMAL EQUIVALENT
public static String convertToHexadecimal(int decimalNumber)
{
String [] allHexadecimalValues = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
int remainder =0;
String returnedHexadecimalNumber="";
Stack <String>stack = new Stack<String>();
if(decimalNumber == 0)
{
returnedHexadecimalNumber = "0";
}
while(decimalNumber >0)
{
remainder = decimalNumber % 16;
String letspush = allHexadecimalValues[remainder];
stack.push(letspush);
decimalNumber /=16;
}
while(!stack.isEmpty())
{
String storePoppedElement = stack.pop();
returnedHexadecimalNumber+=storePoppedElement;
}
return returnedHexadecimalNumber;
}
}