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?

  • milon@lemm.eeOP
    link
    fedilink
    arrow-up
    4
    ·
    1 month ago

    Thanks. I think I understand why I wouldn’t want to use it in this case. But what is an example of where I can use it? This makes me think I should avoid using bitwise operators with integers and keep it to strings only, but I know that’s not true from what I’ve learned.

    • ExtremeDullard@lemmy.sdf.org
      link
      fedilink
      arrow-up
      11
      ·
      edit-2
      1 month ago

      But what is an example of where I can use it?

      Aside from operations on bitfields, a bitwise operator can be useful in several “non bits” cases. For instance:

      value & 1 evaluates to 1 if value is odd (and will evaluate to True in an if statement)
      value >> 1 divides value by 2 (integer division)

      But usually bitwise operators are for when you want to manipulate bits in values. For instance:

      value | 5 returns value with bits 1 and 3 set to True
      value & 0xffff returns the 16 least-significant bits in value (usually you do this to make sure it will fit in 2 bytes in memory for example)
      value & (0xffff ^ 5) returns the lower 16 bits of value with bits 1 and 3 set to False

      Etc.

      • milon@lemm.eeOP
        link
        fedilink
        arrow-up
        7
        ·
        1 month ago

        Thank you for the reply. It seems bitwise operators are somewhat of an advanced concept that I may revisit down the road.

        • ExtremeDullard@lemmy.sdf.org
          link
          fedilink
          arrow-up
          2
          ·
          1 month ago

          They’re quite simple. Just convert the values to binary and apply the applicable truth tables. Just remember operator precedence when you use them, and in doubt, don’t trust your luck and apply parentheses generously 🙂

        • Pup Biru@aussie.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          1 month ago

          python in general tends toward readability over performance optimisation… you’re right they’re an advanced concept, and i’d say if you ever use bitwise operators in python they should be wrapped in some descriptive and very minimal function: treat it like a black box, because the next person that comes along likely won’t understand what’s happening without a pretty good description

          a bit field is just not a descriptive data structure, so manipulate it directly as little as possible

          i’d also say that most peoples use of bitwise operators is when unpacking external data formats (network traffic, operating system primitives, files formats, etc) and they’re usually wrapped in data structures that make those things more pythonic

          unless you know you need bitwise operators, you probably don’t need bitwise operators

    • driving_crooner@lemmy.eco.br
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      1 month ago

      I use that in match case operations, but usually when is just two possibilities, try something like this and see if works

      match coin:
      case 5 | 10 | 20:

      Edit: just tested and it’s works.