Decimal
to Octal conversion: two methods in Matlab
In this article we're going to present two methods of a decimal to octal conversion
in Matlab; that is, we're going to
convert decimal numbers
(numbers with 10 different symbols, from '0' to '9', or in base 10)
into octal
numbers (numbers with only symbols '0' to '7', or in base 8).
First,
let's understand how this works if we do it manually. Later we
can automate the process.
Let's say that we need to convert the number 142 (a decimal number)
into an octal number.
We divide 142 by 8: the quotient is 17 and the remainder is 6 (q = 17,
r = 6). The first digit for our octal number will be this
remainder. This
value will be the least
significant digit in our final value
(assume variable oct = '6', so far).
We divide the previous quotient (17) again by 8: the new quotient is
2 and the remainder is 1 (q = 2, r = 1). Our second digit -right to
left- for the
octal result will be this reminder (variable oct = '16', so
far).
Since the latest quotient was less than 8, we know that we have
finished our conversion. We take the last quotient and include
it in our final octal result, and this is going to be the most significant digit (oct =
'216', final result).
1st. method: with a Matlab function
We can get the decimal to octal conversion using the Matlab command
'dec2base',
which converts a decimal integer to a base B string.
dec2base(D, B) returns the representation of D as a string
in base B. D must be a non-negative integer array
smaller than 252 and B must be an
integer between 2 and 36.
For
example:
dec_nr =
142;
oct
= dec2base(dec_nr, 8);
Matlab's answer is
oct =
'216'
Note that the result is a 3-character string in Matlab, it's not a
number.
2nd. method: our own idea
To automate the process explained above, we need to explain first the
commands 'floor',
'rem', 'num2str' and 'fliplr'.
'floor':
rounds towards minus infinity.
'rem':
remainder after a division.
'num2str':
converts numbers to strings.
'fliplr':
flips matrix in left/right direction.
The proposed code and example is this:
dec_nr =
142
base =
8;
i = 1;
q =
floor(dec_nr/base);
r =
rem(dec_nr, base);
oct(i) =
num2str(r(i));
while base
<= q
dec_nr
= q;
i
= i + 1;
q
= floor(dec_nr/base);
r
= rem(dec_nr, base);
oct(i)
= num2str(r);
end
oct(i +
1) = num2str(q);
oct =
fliplr(oct)
The while-loop goes on
until the quotient is less than our base. q is the quotient, r is the
remainder and we keep all the remainders in string
variable oct.
The last digit in our conversion is the most significan digit
(MSD) and it's the last quotient
obtained, the one that was less than our base.
Since the
octal digits are obtained from least significant to
most significand digit, we have to flip the
array in the last step, so that we can see the number in the
appropriate
order.
From
'Decimal to octal' to Matlab home
From 'Decimal to
octal' to 'Matlab Programming'
Search
Site/ Table of Contents
|
|