The priorities of the binary bitwise operations are all lower than the numeric operations and higher than the comparisons; the unary operation string usually involves a small rounding error.
In contrast, hexadecimal strings allow exact representation and specification of floating-point numbers.
Unadorned integer literals (including binary, hex, and octal numbers) yield plain integers unless the value they denote is too large to be represented as a plain integer, in which case they yield a long integer.
Integer literals with an to a numeric literal yields a complex number with a zero real part.
A complex numeric literal is the sum of a real and an imaginary part.
Note Historically (until release 2.2), Python’s built-in types have differed from user-defined types because it was not possible to use the built-in types as the basis for object-oriented inheritance. The principal built-in types are numerics, sequences, mappings, files, classes, instances and exceptions.
Some operations are supported by several object types; in particular, practically all objects can be compared, tested for truth value, and converted to a string (with the Objects of different types, except different numeric types and different string types, never compare equal; such objects are ordered consistently but arbitrarily (so that sorting a heterogeneous array yields a consistent result).
Furthermore, some types (for example, file objects) support only a degenerate notion of comparison where any two objects of that type are unequal.
Again, such objects are ordered arbitrarily but consistently.
Python fully supports mixed arithmetic: when a binary arithmetic operator has operands of different numeric types, the operand with the “narrower” type is widened to that of the other, where plain integer is narrower than long integer is narrower than floating point is narrower than complex.
Comparisons between numbers of mixed type use the same rule.