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
    1
    ·
    17 days ago

    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.

    • Lucy :3@feddit.org
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      17 days ago
      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.eeOP
        link
        fedilink
        arrow-up
        2
        ·
        17 days ago

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

        • sugar_in_your_tea@sh.itjust.works
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          5 days ago

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

          Here’s the example from the link:

            1 0 0
          | 0 1 1
          --------
            1 1 1
          

          111 is the binary representation of 7. This also has the equivalent result:

            1 0 0
          | 1 1 1
          --------
            1 1 1
          

          All it’s doing is going through each column of the binary number, and if at least one of them is a 1, the result is a 1. If they’re both a 0, the result is a zero. Then you just convert from binary to decimal, so 111 -> 7.