Registers are groups of flip-flops that store binary data. An n-bit register contains n flip-flops and can store 2^n different states. Registers are used to store and provide digital data to logic circuits. There are different types of registers including shift registers. Shift registers can transfer data in serial-in serial-out, serial-in parallel-out, parallel-in serial-out, and parallel-in parallel-out modes. Counters are registers that increment their stored value on each clock pulse and are used to count events.