Most computers available today have the same basic components, configured in basically the same way. They all have input devices, such as a keyboard and a mouse. They all have output devices, such as a display screen and a printer. They also have two or three other basic components, usually housed in some sort of cabinet, where they are not so obvious. These other components are a processor and two kinds of memory, known as main memory and auxiliary memory. The processor is the device inside your computer that follows a program’s instructions. (The processor is also called the CPU, which stands for central processing unit.) If you buy a PC, you will be told what kind of chip it has. The chip is the processor. Currently, one of the better-known chips is the Pentium processor. The processor follows the instructions in a program, but it can carry out only very simple instructions, such as moving numbers or other items around from one place in memory to another and performing some simple arithmetic operations like addition and subtraction. The power of a computer comes from its speed and the intricacies of its programs. The basic design of the hardware is conceptually simple. A computer’s memory holds data for the computer to process, and it holds the result of the computer’s intermediate calculations. The computer has two basic kinds of memory, known as main memory and auxiliary memory. All of the various kinds of disk drives, diskettes, and compact discs that are used with computers are types of auxiliary memory. They are the (more or less) permanent memory. (Auxiliary memory is also called secondary memory.) The working memory that your program uses for intermediate calculations (and for holding the program you are currently running) is called the main memory. It is the character of the main memory that you most need to be aware of when you are writing programs. Main memory holds the current program and much of the data that the program is manipulating. A bit is a digit that can assume only the two values 0 and 1. (Actually, any two values will do, but the two values are typically written as 0 and 1.) A byte is eight bits of memory—that is, a quantity of memory capable of holding eight digits, each either 0 or 1. Both main memory and auxiliary memory are measured in bytes. In main memory, the organization of the bytes is very important. The computer’s main memory consists of a long list of numbered locations, each of which can hold one byte of information. The number of a byte is called its address. A piece of data, such as a number or a keyboard character, can be stored in one of these bytes. When the computer needs to recover the data later, it uses the address of the byte to find the data item. Data of various kinds, such as letters, numbers, and strings of characters, are encoded as a series of zeros and ones and placed in the computer’s memory. As it turns out, one byte is just large enough to store a single keyboard character. This is one of the reasons that a computer’s memory is divided into these 8-bit bytes, instead of into pieces of some other size. However, in order to store a large number or a string of letters, the computer needs more than a single byte. When the computer needs to store a piece of data that cannot fit into a single byte, it uses a number of adjacent bytes. These adjacent bytes are then considered to be a single, larger memory location, and the address of the first byte is used as the address of the entire larger memory location. Display 1.1 shows how a typical computer’s main memory might be divided into memory locations. The boundaries between these locations are not fixed by the hardware. The size and location of the boundaries will be different when different programs are run.