In coding theory, the **dual code** of a linear code

is the linear code defined by

where

is a scalar product. In linear algebra terms, the dual code is the annihilator of *C* with respect to the bilinear form . The dimension of *C* and its dual always add up to the length *n*:

A generator matrix for the dual code is a parity-check matrix for the original code and vice versa. The dual of the dual code is always the original code.

A **self-dual code** is one which is its own dual. This implies that *n* is even and dim *C* = *n*/2. If a self-dual code is such that each codeword's weight is a multiple of some constant , then it is of one of the following four types:^{[1]}

**Type I**codes are binary self-dual codes which are not doubly even. Type I codes are always even (every codeword has even Hamming weight).**Type II**codes are binary self-dual codes which are doubly even.**Type III**codes are ternary self-dual codes. Every codeword in a Type III code has Hamming weight divisible by 3.**Type IV**codes are self-dual codes over**F**_{4}. These are again even.

Codes of types I, II, III, or IV exist only if the length *n* is a multiple of 2, 8, 4, or 2 respectively.

If a self-dual code has a generator matrix of the form , then the dual code has generator matrix , where is the identity matrix and .