In computing,signedness is a property ofdata types representingnumbers in computer programs. A numeric variable issigned if it can represent bothpositive andnegative numbers, andunsigned if it can only representnon-negative numbers (zero or positive numbers).
Assigned numbers can represent negative numbers, they lose a range of positive numbers that can only be represented withunsigned numbers of the same size (in bits) because roughly half the possiblevalues are non-positive values, whereas the respective unsigned type can dedicate all the possible values to the positive number range.
For example, atwo's complement signed 16-bitinteger can hold the values −32768 to 32767 inclusively, while an unsigned 16 bit integer can hold the values 0 to65535. For thissign representation method, the leftmost bit (most significant bit) denotes whether the value is negative (0 for positive or zero, 1 for negative).
For most architectures, there is no signed–unsigned type distinction in themachine language. Nevertheless,arithmetic instructions usually set differentCPU flags such as thecarry flag for unsigned arithmetic and theoverflow flag for signed. Those values can be taken into account by subsequentbranch or arithmetic commands.
TheC programming language, along with its derivatives, implements a signedness for allinteger data types, as well as for"character". For Integers, theunsigned modifier defines the type to be unsigned. The default integer signedness outside bit-fields is signed, but can be set explicitly withsigned modifier. By contrast, the C standard declaressigned char,unsigned char, andchar, to bethree distinct types, but specifies that all three must have the same size and alignment. Further,char must have the same numeric range as eithersigned char orunsigned char, but the choice of which depends on the platform. Integerliterals can be made unsigned withU suffix.
Compilers often issue a warning when comparisons are made between signed and unsigned numbers or when one iscast to the other. These are potentially dangerous operations as the ranges of the signed and unsigned types are different.
Bits | Min | Max |
---|---|---|
8 (signed) | −128 | 127 |
16 (signed) | −32768 | 32767 |
32 (signed) | −2147483648 | 2147483647 |
64 (signed) | −9223372036854775808 | 9223372036854775807 |
128 (signed) | −170141183460469231731687303715884105728 | 170141183460469231731687303715884105727 |
8 (unsigned) | 0 | 255 |
16 (unsigned) | 0 | 65535 |
32 (unsigned) | 0 | 4294967295 |
64 (unsigned) | 0 | 18446744073709551615 |
128 (unsigned) | 0 | 340282366920938463463374607431768211455 |