『プログラミング言語 C』の最初のエディションでは、unsigned は正確に 1 つの型を指定しており、unsigned char、unsigned short、unsigned long はありませんでした。ほとんどの C コンパイラにはそれからまもなく、これらが追加されました。一部のコンパイラは unsigned long を実装せず、残りの 2 つを含んでいました。当然、式の中でこれらの新しい型がほかの型と併用されている場合、実装によって異なる型拡張規則が適用されました。
ほとんどの C コンパイラでは、より単純な規則である「符号なし保持」が使用されています。符号なし型を拡張する必要があるときは符号なし型に拡張され、符号なし型が符号付き型と混在するときは結果は符号なし型です。
ISO C で定義されるもう一方の規則は、「値の保持」と呼ばれ、結果の型はオペランドの型の相対的なサイズによって異なります。unsigned char または unsigned short が拡張されるとき、int がより小さい型の値をすべて表現できる大きさである場合は、結果の型は int です。それ以外の場合、結果の型は unsigned int です。この「値の保持」規則は、ほとんどの式に予期されない演算結果になることは少なくなります。