Integer variables can be assigned using decimal (positive and negative), octal, hexadecimal, and binary notations. A binary byte is usually expressed using two hexadecimal characters. Just as decimal numbers can be represented in exponential notation, so too can hexadecimal numbers. In hexadecimal, 2 digits represent a byte, meaning addresses contain 40 hexadecimal digits. Conversion between decimal, hexadecimal and binary is useful as well as using bit manipulation. There are five colour specification systems with numbers commonly written in hexadecimal and decimal. The table shows both the decimal and the hexadecimal option numbers. They are typically formulated as bit patterns, usually represented in octal or hexadecimal. For example, decimal 0.1 corresponds to the infinite recurring representation 0.1 in hexadecimal. Valid data ranges from 0x00 to 0xFF in hexadecimal notation. Unicode has no separate characters for hexadecimal values. Magazines printed long lists of checksummed hexadecimal digits with machine code games or tools. Note that these values are in hexadecimal notation. Its generalization to binary and hexadecimal notation provides further flexibility and possibility for computer implementation. In computing, the exclamation mark is ASCII character 33 (21 in hexadecimal).