Is there a rule or equation to convert decimal to binary without recursion

384 Views Asked by At

Every solution I’ve seen is always some method you have to repeat or iterate. But is there some equation I could just plug any number into and get the binary value. For context, I’m trying to do this using the material nodes system in the blender 3D modeling program, which comes with a collection of different math operations. The idea is that I wouldn’t have to change anything depending on the number size, nor have any of my own input. So in short, Is there an explicit non-recursive formula that can be used to convert any decimal number into binary.

1

There are 1 best solutions below

1
On

I just had a similar problem where I needed to generalize a formula with bit-wise operations expressing everything in whole numbers instead of bits.

In order to make a formula, I took the method from the following link: https://www.rapidtables.com/convert/number/decimal-to-binary.html

Then I wrote it down mathematically in the following way:

$$ a_i = q_{i-1} \% 2 $$

where $a_i$ is the bit of index i, counting from the little end. $q_{i-1}$ is the quotient of the previous division, and % is the modulo operation.

After that I realised that the recursive part lies within the quotients: $$ q_{i} = q_{i-1} / 2 = q_{i-2} / 2^2 = ... $$

Where all the division are integer divisions rounded down.

This shows that the quotients depend on each other recursively, but not on the bits themselves. Hence, we can resolve the recursion, ending up with the following formula:

$$ a_i = (A / 2^i) \% 2 $$

Here, A is the decimal number, i is the current bit counting from the little end to the big end (starting from zero), and $2^i$ is the power of 2 corresponding to that bit. The division is integer division rounded down.

Note that the number A doesn't even have to be a decimal, it can be anything, as long as the arithmetic is operating in the same base as A.

I know this is probably too late for you, but I still wanted to share this.

Have a nice day