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

Python

6788 readers
41 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
[–] hera@feddit.uk 8 points 1 day ago (2 children)

| is not equivalent to "or". In bitwise operations the integer is converted into bits and the operation is done on a per-bit level. See: https://www.geeksforgeeks.org/python-bitwise-operators/

Eg. 1 | 2 is 3 where as 1 or 3 is 1

[–] fartsparkles@lemmy.world 5 points 1 day ago

Exactly. OP is looking for a Boolean logical operator β€œor” and not the bitwise operator β€œ|”.

[–] milon@lemm.ee 1 points 1 day ago (1 children)

I did come across that link but didn't quite understand it. If looking only at 25 | 10, does the code not run as expected because 25 is 5 digits long and 10 is 4 digits long? Is that what's meant by "two equivalent length bit designs"?

Also, I can't tell if 10 | 4 = 7 or 10 | 4 = 14.

[–] 30p87@feddit.org 5 points 1 day ago* (last edited 1 day ago) (1 children)
0d10 = 0b00001010
0d04 = 0b00000100

1010   |
0100
------
1110

0b00001110 = 0d14


0d25 = 0b00011001
0d10 = 0b00001010

11001   |
01010
-------
11011

0b00011011 = 0d27

If an int is only x bytes long, but y bytes are needed for an action, it's just padded with 0's to the left. So 0b110 = 0b0110 = 0b00000110. Usually you will use either 8, 16, 32 or 64 digits/bits (char, short, int and long respectively, and 1, 2, 4 and 8 bytes long, 1 byte = 8 bits. So you'll usually align it with bytes.) However, for calculating like this removing trailing zeroes can make it more tidy, and sometimes 4 or 2 bits are used too. And bools technically only use 1 bit.

[–] milon@lemm.ee 2 points 1 day ago

Thank you. Not sure why in the link the arithmetic in green results in 7.