if coin == 25 | 10 | 5:

If I replace the ‘|’ with ‘or’ the code runs just fine. I’m not sure why I can’t use ‘|’ in the same statement.

Doing the following doesn’t work either:

if coin == 25 | coin == 10 | coin == 5:

I know bitwise operators can only be used with integers, but other then that is there another difference from logical operators?

  • wewbull@feddit.uk
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    4 个月前

    When you’re working with the binary representation of numbers.

    In your code you had three numbers 25, 10 and 5. If we write those number in binary we get:

    • 25: 0b00011001
    • 10: 0b00001010
    • 5: 0b00000101

    (The 0b at the start is just a way of saying “this is binary”)

    When you do a bitwise-or, it’s a bit like adding up but you don’t bother with carrying anything. So let’s do 25 | 10, starting at the right-hand end going bit by bit (bitwise):

    • 0 | 1 = 1
    • 1 | 0 = 1
    • 0 | 0 = 0
    • 1 | 1 = 1
    • 1 | 0 = 1
    • 0 | 0 = 0 for all the rest

    So the result is 0b00011011 which is 27.

    So now you’re asking “when would I ever need to do such a thing?” and the flippant answer is “you’ll know when you need it”.

    You’re looking for more though, I know. Basically computers often put multiple bits of data into bitstreams (long sequences of bits). Think networking and file storage. Constructing these bitstreams is done with bitwise operators like |, &, ^, << and >>. Together they form a different type of maths to what you’re used to.

    These operators work in a very similar way to how +, -, * and / work. They take two numbers and return a third. If we rewrite your code using operators you’re more familiar with…

        if coin == 25 | 10 | 5:  # if coin == 31
            ...
        if coin == 25 + 10 + 5:  # if coin == 40
            ...
    

    …you can see it’s obviously wrong because you’re doing one comparison with the result of the operation (addition or bitwise-or), not three comparisons.

    • milon@lemm.eeOP
      link
      fedilink
      arrow-up
      0
      ·
      4 个月前

      Thank you for the thorough explanation. It makes sense to me why I had the error that I did. I’ll keep this in mind next time when I consider using a bitwise operator.