Common data type ranges
From Maths
TODO: This is just some notes for me to reference at the moment, please only use these IF YOU KNOW THEY APPLY - there are various C conventions...
Signed integers - 2's complement
- In general, given [ilmath]n[/ilmath] bits, the range of [ilmath]x[/ilmath] (an [ilmath]n[/ilmath]-bit signed two's complement integer) is:
- [ilmath]-2^{n-1} \le x \le 2^{n-1}-1[/ilmath], which we may write as a closed interval of the integers, [ilmath]x\in[-2^{n-1},\ 2^{n-1}-1][/ilmath]
Bits | Range (inclusive) | Comment | |||
---|---|---|---|---|---|
Signed | Unsigned | ||||
Low | High | Low | High | ||
8 | -128 | 127 | 0 | 255 | |
16 | -32,768 | 32,767 | 0 | 65,365 | Often associated with older spreadsheet software, only supporting rows from 1 to 65,536. Note the offset^{[Note 1]}. |
24 | -8,388,608 | 8,388,607 | 0 | 16,777,215 | Relevant for float - per standard. |
32 | -2,147,483,648 | 2,147,483,647 | 0 | 4,294,967,295 | Notice that 2,147,483,647 is about 68.05 years^{[Note 2]}, and 1970+68=2038 - see 2038 problem |
64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 | 0 | 18,446,744,073,709,551,615 | 9.2 billion trillion, 18.4 billion trillion using 10^3 increments. |
TODO: Notice the lowest digit of each column is the same. Why?
Notes
- ↑ Internally for rows they'd have used shorts for the job, adding one to the displayed row number as spreadsheets have no row 0.
- ↑ Calculation:
- [math]A:\eq\frac{2^{31} -1}{60*60*24*365.25}\approx 68.04965039[/math] which is 68 years and [ilmath](A-68)*365.25\approx 18.135[/ilmath], so: