op_precedence.py 818 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # see https://docs.python.org/3/reference/expressions.html#operator-precedence
  2. # '|' is the least binding numeric operator
  3. # '^'
  4. # OK: 1 | (2 ^ 3) = 1 | 1 = 1
  5. # BAD: (1 | 2) ^ 3 = 3 ^ 3 = 0
  6. print(1 | 2 ^ 3)
  7. # '&'
  8. # OK: 3 ^ (2 & 1) = 3 ^ 0 = 3
  9. # BAD: (3 ^ 2) & 1 = 1 & 1 = 1
  10. print(3 ^ 2 & 1)
  11. # '<<', '>>'
  12. # OK: 2 & (3 << 1) = 2 & 6 = 2
  13. # BAD: (2 & 3) << 1 = 2 << 1 = 4
  14. print(2 & 3 << 1)
  15. # OK: 6 & (4 >> 1) = 6 & 2 = 2
  16. # BAD: (6 & 4) >> 1 = 2 >> 1 = 1
  17. print(6 & 4 >> 1)
  18. # '+', '-'
  19. # OK: 1 << (1 + 1) = 1 << 2 = 4
  20. # BAD: (1 << 1) + 1 = 2 + 1 = 3
  21. print(1 << 1 + 1)
  22. # '*', '/', '//', '%'
  23. # OK: 2 + (2 * 2) = 2 + 4 = 6
  24. # BAD: (2 + 2) * 2 = 4 * 2 = 8
  25. print(2 + 2 * 2)
  26. # '+x', '-x', '~x'
  27. # '**'
  28. # OK: -(2**2) = -4
  29. # BAD: (-2)**2 = 4
  30. print(-2**2)
  31. # OK: 2**(-1) = 0.5
  32. print(2**-1)
  33. # (expr...)
  34. print((2 + 2) * 2)