this post was submitted on 09 Mar 2025
18 points (87.5% liked)

Python

6788 readers
97 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

๐Ÿ“… Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

๐Ÿ Python project:
๐Ÿ’“ Python Community:
โœจ Python Ecosystem:
๐ŸŒŒ Fediverse
Communities
Projects
Feeds

founded 2 years ago
MODERATORS
 

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?

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 8 points 1 day ago* (last edited 1 day ago) (1 children)

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.

[โ€“] [email protected] 3 points 11 hours ago

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.