32位/ 64位 系统下基本数据类型说明
1、32位/ 64位系统差别:
计算机系统主要差别:指针寻址空间的差别:32位4字节 vs 64位8字节
指针类型变量大小只取决于计算机系统的位数,等于long int / long 或者 unsigned long类型大小,即计算机系统“字”的大小。(因为C语言为了保持跨平台的统一,所以char, short int, int, long long int都采用了固定位数,不随系统位数变化而变化,但是long int类型是根据系统位数决定的)。
类型 | 32 位 | 64位 |
---|---|---|
long | 4 | 8 |
unsigned long | 4 | 8 |
未知系统下的数据所占字节数:可以使用sizeof单目运算符,获取某个数据类型所占用空间的字节数,例如sizeof(int),sizeof(short),sizeof(double)。
2、基本数据类型
32 位/64位编译器/机器,除了long/unsigned long外,其余数据类型都是相同。
类型 | 字节数 | 位数 | 取值范围 | 无符号unsingned |
---|---|---|---|---|
char | 1 | 8 | -2^7 ~ +2^7 ( -127 ~ +128) | 0 ~ 2^8 (0 ~ 255) |
short int | 2 | 16 | -2^15 ~ +2^15 (-32767 ~ +32768) | 0~2^16 (0 ~ 65536) |
int | 4 | 32 | -2^31 ~ +2^31 (-2147483648 ~ +2147483647) | 0 ~ 2^32 (0 ~ 4294967295) |
long long | 8 | 64 | -2^63 ~ +2^63 (-9.22E+18~9.22E+18) | |
int_64 | 8 | 64 | -2^63 ~ +2^63 (-9.22E+18~9.22E+18) | 0~ +2^64 (0~1.84E+19) |
float | 4 | 32 | 指数位8位(2^7=128) 取值-2^128 ~ +2^128 (-3.40E+38 ~ +3.40E+38) | |
double | 8 | 64 | 指数位11位(2^10=1024) 取值-2^1024 ~ +2^1024 (-1.79E+308 ~ +1.79E+308) |
对于float与double的范围和精度-特殊说明
类型 | float 32bits/4字节 | double 64bits/8字节 | ||||
---|---|---|---|---|---|---|
符号位 | 指数位 | 尾数位 | 符号位 | 指数位 | 尾数位 | |
位数(bit/位) | 1 | 8 | 23 | 1 | 11 | 52 |
取值 | 0~1 | -2^7~2^7(-127~128) 见说明1 | 2^23 = 8388608 七位 | -2^10~2^10(-1023~1024) | 2^52 = 4503599627370496 十六位 | |
组成 | 整数部分 | 小数部分 | 整数部分 | 小数部分 | ||
取值 | -2^128~+2^128 (-3.40E+38 ~ +3.40E+38) | 精度为6~7位有效数字 | -2^1024~+2^1024(-1.79E+308 ~ +1.79E+308) | 精度为15~16位有效数字 |
说明1:float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
3、数据的表示
前缀(进制),后缀(数据类型),组合使用可表示各种类型的数。如下:
进制 | 前缀 | 数值 | 后缀-长整型 | 后缀-无符号型 | 举例 |
---|---|---|---|---|---|
8进制 | 0 | 205 | L或者l | U或者u | 0205,0205L,0205u,0205Lu |
10进制 | 无 | 165 | L或者l | U或者u | 165,165L,165U,165LU |
16进制 | OX | A5 | L或者l | U或者u | OXA5,OXA5L,OXA5U,OXA5LU |