Machine code is the actual form of the information that a computer's central-processing-unit? understands. If you look at an executable file in a text or hex editor, you will see machine codes -- but you probably won't understand them. They are not very readable to humans, but it can be done with a lot of intimate understanding of the internal workings of a computer and a good reference sheet. Each processor architecture uses different machine codes, which is why programs must be compiled specially for a given architecture.

Much more easy to write/understand than machine-code, but harder than other languages, is assembly-language?. This is a set of mnemonic keywords directly associated with machine codes.

Since the ascii codes for bytes vary from machine to machine, and can be hard to type, it's easier to view and write these codes in the form of two-digit hexadecimal numbers. Hexadecimal numbers take up one nybble (four bits) each, so with two of them you get a byte's worth of possible combinations.