| ▲ | adrian_b 13 hours ago | |||||||
The C language does not have any data type that has the property "can't be negative". Signed integers can be negative. The so-called "unsigned" integers of C are integer residues modulo 2^N, which are neither positive nor negative, i.e. these concepts are not applicable to "unsigned" integers. An alternative view is that any C "unsigned" is both positive and negative. For example the unsigned short "1" is the same number as "65537" and as "-65535". So any sizeof value in C is negative (while also being positive). In contradiction with what you say, the change described in TFA, by making sizes 64-bit signed integers, is the only method to guarantee that the sizes are non-negative in a language that does not have dedicated non-negative integers. Other programming languages have non-negative integers, but C and C++ and many languages derived from them do not have such integers. The arithmetic operations with non-negative integers differ from the arithmetic operations of C. On overflows and underflows, they either generate exceptions or have saturating behavior. | ||||||||
| ▲ | alberto-m 12 hours ago | parent | next [-] | |||||||
> An alternative view is that any C "unsigned" is both positive and negative. For example the unsigned short "1" is the same number as "65537" and as "-65535". This can be disproven by the fact that dividing by `unsigned e = 1U` is well defined and always yields the starting number. If the unsigned numbers were really modular numbers as you suggest, division could not be defined. | ||||||||
| ||||||||
| ▲ | marshray 12 hours ago | parent | prev | next [-] | |||||||
Are you claiming that the following program could possibly print "-1" ?
If not, why? | ||||||||
| ▲ | cperciva 12 hours ago | parent | prev [-] | |||||||
Leaving aside the fact that, yes, unsigned integer types are definitely not negative -- my point wasn't about types at all. Objects cannot take up a negative number of bytes of memory! | ||||||||