Non-return to zero signaling is a method of physical signal encoding on a wire. It's the traditional binary encoding that many people think of when sending data, and is used in some small systems.

In NRZ signaling, a binary one is encoded as a pulse of some voltage level (Call it 'A'), and a binary zero is encoded as a pulse of ground (zero voltage). This is contrasted with other physical data encoding methods, such as manchester encoding, differential manchester encoding (Both used in different ethernet types), Non Return To Zero Inverted (Used in USB), and if you're really fancy, various analog encoding methods like QAM and Phase Shift Key Encoding used in analog modems. I'm sure there are a ton more encoding methods than I can pull off the top of my head.

The data 0xA5, or 10100101b is encoded like this in NRZ:

   ...10100101...
A     _ _  _ _
0  ... _ __ _ ...

Also written as:

      1 0 1 0 0 1 0 1
      _   _     _   _
   ... |_| |___| |_| ...

Note that due to the width of the |, the "00" part of the second diagram has three underscores instead of two. If it were possible to have edge transitions in zero space with a monospaced font, I could represent the time scale properly while including edge transitions, but as it stands this is about the best I can do, after consultation with others via /msg.

The data 0x5A, or 01011010 is:

   ...01011010...
A      _ __ _
0  ..._ _  _ _...

A.K.A.:

      0 1 0 1 1 0 1 0
        _   ___   _
   ..._| |_|   |_| |_...

As can be seen, no fancy mangling of the signal goes on. Just a pulse fo one and no pulse for zero. Also important to note in both of these is that each pulse takes the same amount of time. The edge transitions are very fast, and this is an idealized drawing. I have no way of making the edge transitions occur in no time with a monospaced font.

NRZ signaling has some serious problems operating in real systems. It provides no method of assuring that there is a reasonable number of transitions in the signal, which is important if you're using a phase-locked loop to keep your clocks running in sync. It also provides no method for level balancing. That is, if a signal of a million ones comes across the line, the line will be held at voltage 'A' for quite a while. The long-run behavior of this is that charge will accumulate in the wire, and you'll have some (unknown ahead of time) DC voltage occuring. This is a big mess to deal with in a system design, and it's very important to avoid it. (Manchester encoding and the like are all designed to deal with these two problems.)

My sources for this information are the myriad computer engineering courses I've taken over the last few years at my university. Any text on network design will provide information on this, but I got exposed to it through a class about USB instead. Also, hobyrne graciously jumped on me about time scale in my diagrams.