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:

Table 11-1. Hexadecimal and Binary

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 ...*

Start Free Trial

No credit card required