b=‘1111’

i=0

while b:

i = i*2+(ord(b[0])-ord(‘0’))

b=b[1:]

print(‘Decimal value’+ str(i)

Can anyone explain what does ord(b[0]) do here?

b=‘1111’

i=0

while b:

i = i*2+(ord(b[0])-ord(‘0’))

b=b[1:]

print(‘Decimal value’+ str(i)

Can anyone explain what does ord(b[0]) do here?

This is a great thing to play around with in the REPL - the Python command-line interpreter. Start by looking at it one piece at a time.

```
>>> b='1111'
>>> b[0]
'1'
>>> ord(b[0])
49
```

So… what does ord() do? Let’s have a look at its documentation. (You can see this interactively by typing `help(ord)`

- note that you aren’t calling ord here, you’re passing it as a parameter to the `help`

function.)

```
Help on built-in function ord in module builtins:
ord(c, /)
Return the Unicode code point for a one-character string.
```

Does that answer the question? If not, here’s a video from Computerphile about the basics of Unicode: https://www.youtube.com/watch?v=MijmeoH9LT4 What the ord() function does is take a character and give you its number; there’s a corresponding `chr()`

function which takes a number and gives you back the character.

Hope that’s a start!

Hey Chris bro! Now i understood after reading this twice:

b=‘1111’

b[0]

‘1’

ord(b[0])

49

I learnt C++ so now i understood this shit lol thanks m g!

1 Like

Bro can you please tell me why we have used i*2?

This is part of the concept of **place value** - since you’re working in binary, each place is worth 10 (binary) or 2 (decimal) times the previous place. Try working through things manually and see it happen. If you were to multiply by 10 (decimal) instead, you would get the number represented by a string of decimal digits; if you were to multiply by 10 (octal) or 8 (decimal), you’d get the number represented by a string of octal digits; etcetera.

1 Like

Each time through the loop, what values do you see for `i`

if you test it? Do you see how that relates to the `b`

input?

Let’s say I have a value `i`

that represents the converted result for `100`

, and then I want to get the result for either `1000`

or `1001`

(both of the 4-bit binary strings starting with `100`

). How will the result for `100`

help us here? What steps would you take, in order to compute the rest of the result? Can you see why multiplying by 2 would be helpful? (Hint: what’s another name for “binary”?)

1 Like

As an aside, note that Python has the ability to do binary-decimal conversions inbuilt. `int()`

accepts two parameters, with the second specifying the number base to use. `int("1111", 2) == 15`

. Of course that doesn’t help with understanding how such a conversion actually works.

1 Like

Got it Spencer! Thanks!

This explanation was the best, Karl! Thanks a ton!