## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

## Chapter 11. Bit Operations

To be or not to be, that is the question

— Shakespeare, on boolean algebra [Hamlet, Act 3, Scene 1]

This chapter discusses bit-oriented operations. A bit is the smallest unit of information. Normally, it is represented by the values 1 and 0. (Other representations include on/off, true/false, and yes/no.) Bit manipulations are used to control the machine at the lowest level. They allow the programmer to get under the hood of the machine. Many higher-level programs will never need bit operations. Low-level coding, like writing device drivers or pixel-level graphic programming, requires bit operations.

Eight bits together form a byte, represented by the C data type char.[13]

A byte might contain the following bits:

`01100100`

This bit structure can also be written as the hexadecimal number 0x64. (C uses the prefix “0x” to indicate a hexadecimal (base 16) number.) Hexadecimal is convenient for representing binary data because each hexadecimal digit represents 4 binary bits. Table 11-1 gives the hexadecimal-to-binary conversion:

 Hexadecimal Binary Hexadecimal Binary 0 0000 8 1000 1 0001 9 1001 2 0010 A 1010 3 0011 B 1011 4 0100 C 1100 5 0101 D 1101 6 0110 E 1110 7 0111 F 1111

So the hexadecimal number 0xAF represents the binary number 10101111.

The `printf` format for hexadecimal is `%x;` for octal the format is `%o`. So:

```int number = 0xAF;
printf("Number is %x %d %o\n", number, number, number);```

prints:

`af 175 257`

Many novice programmers get a number confused with its representation ...

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required