+ 2
Binary number to decimal number
I have seen a code, which I am unable to understand the logic. Anyone please help! This is the code: d=0 for s in "00010000": d = d*2 + int(s) print(d)
6 Answers
+ 4
Prithvi
This is an example of
'Explicit is better than implicit'
The code you showed is clever, but not easilly understood by humans
Normally you start at the position of the Least Significant Bit, wich is on the right. You then multiply the value with the base to the power of the position and move through from right to left and add all together. The position of the bit is explicitly named
By starting on the left you get the same effect but the position is not explicitly named.
For 010000
from right to left you have a 1 at position 4.
So 1 x 2^4
and by following your prog you get.
(0+1) x 2 x 2 x 2 x 2 which is equal to 1 x 2^4
So it is more difficult for a user to understand what is happening.
+ 7
Nope... from the right side and it is a bit tricky.
Do it in decimal with 321
D=0
D = 0Ă10 +3 =3
D = 3Ă10+2 =32
D= 32Ă10 + 1= 321
Check that the digit at 3rd place from right is multiplied 3 times by 10
And so on.
+ 6
Ha, nice concise way to do that. :)
I have found this article which explains the logic of binary system and how you convert it.
After you've read it, this loop should have become understandable.
https://www.electronics-tutorials.ws/binary/bin_2.html
+ 1
Thank you for your time. I understand the concept of conversion, but I am not understanding the logic of the code.
Does that code take s in "00010000" from last digit automatically.
And if so, what is "int(s)" and assumed that d=0 initially.
+ 1
Louis
Thank you. You have explained a lot, I am still not understanding. I know I have asked a lot, but why is it (0+1)Ă2Ă2Ă2Ă2?
If I had understood this correctly, d=2 by default until the bit reaches '1' and keep on adding the result.
+ 1
Prithvi
Study this code and see if you can figure it out.
https://code.sololearn.com/cFCmlVrHpC4J/?ref=app