Number to Digits
Studying the internal representation of the numbers inside the computers is important in several aspects. Programming of the data storages and the data transfer channels requires strong understanding of how the numbers are built from bytes. On the other hand the number theory deals with many properties of the number representation directly and is employed in the fields of cryptography and other kinds of data encoding.
For the first approximation we can assume that the numbers are stored in the computer memory as a single intact variable. Such aspect is very useful when we need to have numbers represented as a sequence of digits. For example, when printing them in human-readable format.
Though most programming languages have built-in functions to convert numbers into string representation, it is quite important to know how it is performed (and to be able to write algorithms based on similar idea).
Suppose, we have a number stored in a variable and we want to find out, by which digits it should be represented, for example in decimal numeral system. - divide the number by 10, keeping the remainder; - remainder of division is the last digit of the number; - result of division should be divided by 10 again; - remainder of the second division is the second last digit; - and so on, until the result of sequential divisions becomes 0.
Let us see an example:
1492 div 10 = 149 and 2 as a remainder 149 div 10 = 14 and 9 as a remainder 14 div 10 = 1 and 4 as a remainder 1 div 10 = 0 and 1 as a remainder
Now we know that
1492 consists of digits
1, 4, 9, 2 - the fact looks bit stupid and naive - but just because we,
unlike computers, use numbers already represented as their decimal notation.
But see, the same algorithm could be used to get representation of the number in numeral system with base other than 10. For example, let us find how 1492 looks in octal numeral system:
1492 div 8 = 186 and 4 as a remainder 186 div 8 = 23 and 2 as a remainder 23 div 8 = 2 and 7 as a remainder 2 div 8 = 0 and 2 as a remainder
1492 in octal is
If we will try to represent the same number as hexadecimal, we will see a funny thing:
1492 div 16 = 93 and 4 as a remainder 93 div 16 = 5 and 13 as a remainder 5 div 16 = 0 and 5 as a remainder
Surprise is that we have no
digit to represent
13. In computer science latin letters used to represent
digits greater than 9, i.e. the sequence of digits looks like:
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N ...
From this row we take as many digits as is necessary for given numeral system (up to
F for hexadecimal). So
will be represented as
5D4 in hexadecimal.