C: unario meno il comportamento dell’operatore con operandi senza segno

Non riesco a trovare le parti rilevanti nello standard C definendo completamente il comportamento dell’operatore meno unario con operandi senza segno.

Lo standard C ++ del 2003 (sì, C ++, supporta me per poche righe) dice in 5.3.1c7: The negative of an unsigned quantity is computed by subtracting its value from 2^n, where n is the number of bits in the promoted operand.

Lo standard C del 1999, tuttavia, non include una dichiarazione così esplicita e non definisce chiaramente il comportamento unario né in 6.5.3.3c1,3 né in 6.5c4. Nel secondo si dice che Some operators (the unary operator ~, and the binary operators <>, &, ^, and |, ...) ... return values that depend on the internal representations of integers, and have implementation-defined and undefined aspects for signed types.) , che esclude l’unario meno e le cose sembrano rimanere vaghe.

Questa prima domanda si riferisce al libro ANSI C di K & R, sezione A.7.4.5 che dice che The negative of an unsigned quantity is computed by subtracting the promoted value from the largest value of the promoted type and adding one .

Quale sarebbe lo standard C del 1999 equivalente alla citazione sopra del libro?

6.2.5c9 dice: A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting type.

È così? O c’è qualcos’altro che mi manca?