本帖最后由 lynn010 于 2015-12-29 20:46 编辑
数据类型取值范围基于编译器的字长有关【单位为字节】
| 16位编译器 | 32位编译器 | 64位编译器(目前主流) | char | 1 | 1 | 1 | int | 2 | 4 | 4 | float | 4 | 4 | 4 | double | 8 | 8 | 8 | short | 2 | 2 | 2 | long | 4 | 4 | 4 | long long | 8 | 8 | 8 | void *(指针变量) | 2 | 4 | 8 |
一、数据类型范围算法
由于苹果电脑目前都为64编译,就此仅讨论64位的数据类型范围。
1个字节=8个进制位
1、对于整数型
int占1个字节,且带符号,最高位为符号位,因此int的范围是-2^(8*4-1)到2^(8*4-1)-1即-2^31到2^31-1
unsigned int 的范围则是0到2^32
2、对于浮点型数据类型
%f float 类型精度小数点后6位,有效数字是7位(包含小数点前数字)%f double 类型精度小数点后6位,有效数字是15位(包含小数点前数字)
float类型有1个符号位、8个指数位、23个尾数位,但有效数位是7位
float的范围为-2^(8-1)到2^(8-1)【指数也要求有符号位,因此才能有表示小数,具体参考IEEE 754规范】
精度由尾数位数决定2^23=8388608因此最多有7位有效数字,且能保证的为6位,故float精度为6~7位
double类型有1个符号位、11个指数位、52个尾数位,但有效数位是15位
double的范围为-2^(11-1)到2^(11-1)【指数也要求有符号位,因此才能有表示小数,具体参考IEEE 754规范】
精度由尾数位数决定2^52=4503599627370496因此最多有16位有效数字,且能保证的为15位,故double精度为15~16位
公式:
F=1.M(二进制)
在单精度时: V=(-1)^s*2^(E-127)*F
在双精度时: V=(-1)^s*2^(E-1023)*F
http://blog.csdn.net/linmx000/article/details/50414395
|
|