# Decimal to Binary Converter...

## Recommended Posts

it was simple enough when i converted it manually (top of my example code) but when i tried to make a function that would take any size number and convert it.... i failed. closest i could get is getting it to convert all but the last digit but even still there must be a more logical approach to this

```#include <Math.au3>
#AutoIt3Wrapper_run_debug_mode=Y

\$I_Var = InputBox('Decimal to Binary', 'Enter a number between 0-15')

\$num = \$I_Var

\$8_Result = int(\$I_Var/8)
if (\$8_Result) then \$I_Var = \$I_Var -8
\$4_Result = int(\$I_Var/4)
if (\$4_Result) then \$I_Var = \$I_Var -4
\$2_Result = int(\$I_Var/2)
if (\$2_Result) then \$I_Var = \$I_Var -2
\$1_Result = int(\$I_Var/1)

Func Decimal2Binary(\$num)
\$x = int(Sqrt(\$num))
; MsgBox(0,'sqrt',\$x)

; get the sqr to work down from...
\$i = 0
\$sqr = 1
if \$x > 1 Then
while \$i < \$x
\$sqr = \$sqr * 2
\$i = \$i + 1
WEnd
EndIf

; now loop all the way to 1
\$i = 0
dim \$binary
while \$i <= \$x
if \$sqr > 2 then
\$bin = int(\$num/\$sqr)
EndIf
\$num = \$num - \$sqr

\$sqr = \$sqr/2

\$binary = \$binary & \$bin
\$i = \$i + 1
WEnd

; \$bin = int(\$num/1)
; \$binary = \$binary & \$bin

MsgBox(0,'',"binary: " & \$binary)

EndFunc

MsgBox(0,'','Binary: ' & \$8_Result & \$4_Result & \$2_Result & \$1_Result)

Decimal2Binary(\$num)```

Don't let that status fool you, I am no advanced memeber!

##### Share on other sites

WoW... lol yah thats a bit over my head (at least 'how' its working) but ty ty WBD it works well now to see if i can disect it and figure out what the heck kind of magic is going on

thx again

Don't let that status fool you, I am no advanced memeber!

##### Share on other sites

Seems like you're making stuff more complicated than they need to be.

This method see which numbers in the 2^n series that can be subtracted from the decimal and if it can it adds a 1 and if 0 in the other case.

The function looks like this.

```\$Number=InputBox("Dec2Bin","Decimal to convert to Binary",0)
MsgBox(0, \$Number, Dec2Bin(\$Number))

Func Dec2Bin(\$Num)
Local \$Bin
Local \$iStart = 2 ^ Int(Log(\$Num) / Log(2))
For \$i = 0 To Int(Log(\$Num) / Log(2))
If \$Num - \$iStart >= 0 Then
\$Bin &= "1"
\$Num -= \$iStart
Else
\$Bin &= "0"
EndIf
\$iStart/=2
Next
Return \$Bin
EndFunc;==>Dec2Bin```

Edit: Slow, nice script there WideBoyDixon

Edited by monoceres

Broken link? PM me and I'll send you the file!

##### Share on other sites

WoW... lol yah thats a bit over my head (at least 'how' its working) but ty ty WBD it works well now to see if i can disect it and figure out what the heck kind of magic is going on

thx again

It constructs the number from right to left. To do so it continually takes the remainder from dividing by two (so zero or 1) and prepends that to the result. It then divides the original number by 2 and starts again. So, for example, for 11:

Mod(11, 2) = 1 : Int(11/2) = 5

Mod(5, 2) = 1 : Int(5/2) = 2

Mod(2, 2) = 0 : Int(2/2) = 1

Mod (1, 2) = 1 : Int(1/2) = 0 -> Stop

Reading from the bottom up gives 1011 which is the representation of binary. Since you only want binary you *could* use bit-wise operations if you want something a bit faster:

```Global \$iNumber = 11
Do
\$iNumber = Number(InputBox("Dec2Bin", "Enter a decimal number", \$iNumber))
MsgBox(64, "Result for " & \$iNumber, Dec2Bin(\$iNumber))
Until \$iNumber = 0
Exit

Func Dec2Bin(\$iNumber)
Local \$sRet = ""
Do
\$sRet = BitAND(\$iNumber, 1) & \$sRet
\$iNumber = BitShift(\$iNumber, 1)
Until \$iNumber = 0
Return \$sRet
EndFunc```

## Create an account

Register a new account