Code (1999) by Charles Petzold is a superb book that gives a very clever, well thought out overview of how computers work. Petzold is better known for writing technical books on Microsoft Windows and really understands what he is writing about.
The book starts by looking at how to transmit information and goes over Morse Code, Braille and the telegraph. Petzold then looks at different bases and binary. Combining the previous ideas he writes about relays and how they can be used as switches and adding machines created. Petzold shows how a half-adder and then full binary adders are created. He gradually expands the complexity of the machine created by adding memory and more instructions and thus shows how a real computer is created.
Petzold then describes some early microprocessors, the Intel 4004 and the Motorola 6800 and writes about buses, Operating Systems, Floating Point Math and Graphics.
The book is a great achievement in the way it describes how a computer is built up from simple parts. For anyone interested in really understanding computers it would make a fantastic introduction and for those who work with the machines it succeeds in giving the reader a sense of wonder that describes how combinations of fundamentally simple things can be used to create devices of astounding utility.