# What's the difference between 0 and high impedance (or floating)?

I was introduced to this state of high impedance (that is, not 0 and not 1) in a wire.

I don't understand the difference between 0 and high Z, I see that these are both absence of energy in the wire.

For example, if I'm at one side of the wire and in the other side there is a signal, how can I tell the difference between 0 and Z?

• 0 is when wire is connected to the 0 potential. Z is when the wire is floating (not connected to anything). You can't "detect" high-Z, but you can pull it up or down. Commented Sep 12, 2017 at 18:43
• Weak drivers or pull-up/down resistors can control a high Z signal but not a 0 signal.
– user16324
Commented Sep 12, 2017 at 18:44
• FYI High-Z is normally used where the signal line is shared by multiple drivers. Only one driver should be enabled and active at a time.. for example memory chips on a data bus. High-Z signals are also noisy, from other sources, when nothing is driving them. Commented Sep 12, 2017 at 18:47
• Your problem here is in imagining that "0" means "absence of." High-Z is the absence of a low-impedance driver. "0" almost always means "actively driven to 0" with a low-impedance driver of some kind.
– jonk
Commented Sep 12, 2017 at 20:49

I don't know so much about other logic families, but let me tell you about TTL:

If you leave an input of a TTL gate un-connected, the gate will read that as a logic 1. People say that to get a logic 0 you have to "drive the gate low." But what that really means is, you have to pull current from the input pin to pull its voltage down below the logic 0 threshold.

A normal TTL output pin either drives the output line high (in which case, very little current flows), or else it drives the line low (in which case, the output pin pulls current from however many input pins it "fans out" to.

Note: Those currents add up. That is why there is a limit to how many inputs can be driven from one output.

A tri-state output can either drive the output line high, drive it low, or enter "hi-Z state" (a.k.a., "high impedance state", a.k.a., "disabled", a.k.a., "tri-stated"). In high-Z state, the output pin effectively is disconnected.

The purpose of tri-state outputs is to allow more than one chip to drive the same line, which usually is called a bus in this context. Normally, if you connect two outputs together, when one goes high and the other goes low, you get smoke---maybe. If not smoke, then you get a large current flowing from the output that's trying to drive the line high to the output that's trying to drive the line low, and you get a undefined voltage on the bus.

If, on the other hand, you have a number of tri-state outputs connected to the bus, then all you have to do is make sure that only one of those outputs is enabled (i.e., not in high-Z state) at any moment in time.

If none of the drivers on the bus is enabled, then the bus will "float" high, but probably not in a well-defined time frame. To remedy that problem, a TTL bus with tri-state drivers typically is connected to V+ through a "pull up" resistor that helps it to achieve a well-defined logic 1 state in a timely fashion.

For example, if I'm at one side of the wire and in the other side there is a signal, how can I tell the difference between 0 and Z?

You call tell the difference e.g. by following circuit:
The LED will light up if your signal line is in 0 state.
It will not light if it is in Z state.

if I'm at one side of the wire and in the other side there signals (1, 0) or high Z , how can i detect the difference.

The real question is, why would you want to?

The usual reason for having high Z is so several devices can share a wire with only one putting data on it at a time, and/or for using a pin as both input and output. In these applications if all the devices are high Z then the logic level is undefined and the wire will 'float' to whatever residual voltage is present.

If you are looking at a signal with an oscilloscope then the probe resistance (typically 1 or 10MΩ) will (weakly) pull the voltage down to ground and you can't tell whether it is actively pulled low (logic 0) or high Z. A simple way you can tell the difference is to inject a high impedance signal (eg. mains hum via your finger) that is shorted out when the logic is pulling high or low.

Another possible use of high Z is for generating a 3 level output. The circuit below (from an Amstrad CPC 464 home computer) generates 27 colors using just 3 digital outputs from the gate array. Each output can either pull up or down or be high Z. In high Z the pin voltage is determined by the resistors connected between Vcc and 0V.

Consider a digital gate with 5 volt as 1 (HIGH) and 0 volt as 0 (LOW). Now consider the following cases:

1. If output is 0 (LOW) and if you connect a 5 volt battery to the output through a resistance of 5k then current of 1mA will flow. If you connect the output to the ground(0 volt,) no current will flow.
2. If output is 1 (HIGH) and if you connect a 5 volt battery to the output through a resistance of 5k then current will not flow but if you connect the output to the ground (0 volt) through a 5k resistance, 5mA current will flow.
3. In Hi-Z state when you connect the output to the battery or to the ground current will not flow in any case because the circuit is open( i.e high impedance.)

If one connects an oscilloscope to a wire connected to outputs which are all in high impedance state, the wire catches plenty of noise in computer environment.

To surely see, is a wire connected only to high impedance outputs, is to try to connect the wire in turn to + logic supply voltage and GND via a resistor. The voltage of the wire doesnt follow, if somone outputs 1 or 0 to the wire. The proper resistor which can pull up and down depends on the used logic family. It's specified in the logic family datasheet.

In digital logic, tri-states (0,1,Z) are often used for bidirectional "inout" lines. This is commonly seen in FPGAs (although this is less common in today's more modern architectures, where tri-state models are typically synthesized into LUTs or MUXs behind the scenes).

Still, tri-state buffers on FPGA IO blocks do still exist in many fabrics. They are used to control the direction of the flow of data. For example, if an IO line is programmed to switch from an output to an input, the output driver will go into a high-impedance ('Z') state, disabling the output, and allowing the receiving gate to read the line.