在 win64操作系统 下的各数据型的取值范围。
一、各数据类型数据----字节数
数据类型 | char | short | int | long | long long | float | double |
---|---|---|---|---|---|---|---|
字节数 | 1 | 2 | 4 | 4 | 8 | 4 | 8 |
计算存储空间相关介绍:C语言:关键字—sizeof(计算存储空间)
具体代码解析:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("char = %d\n",sizeof(char));
printf("short = %d\n",sizeof(short));
printf("int = %d\n",sizeof(int));
printf("long = %d\n",sizeof(long));
printf("long long = %d\n",sizeof(long long));
printf("float = %d\n",sizeof(float));
printf("double = %d\n",sizeof(double));
return 0;
}
运行结果如下:
二、字符型数据----取值范围
数据类型 | 数据类型符 | 字节数 | 数值范围 | 说明 |
---|---|---|---|---|
字符型 | char | 1 | -128 ~ +127 | 第一位是符号位:0是正数,1是负数 剩下7位是数据位:-27 ~ 27-1 |
无符号字符型 | unsigned char | 1 | 0~255 | 8位数据位:0 ~ 28-1 |
具体代码解析:
#include <stdio.h>
int main(int argc, char *argv[])
{
char cdata[7] ={-129,-128,-1,0,1,127,128} ;
printf("%d,%d,%d,%d,%d,%d,%d\n",cdata[0],cdata[1],cdata[2],cdata[3],cdata[4],cdata[5],cdata[6]);
unsigned char ucdata[6] ={-1,0,1,127,255,256} ;
printf("%d,%d,%d,%d,%d,%d\n",ucdata[0],ucdata[1],ucdata[2],ucdata[3],ucdata[4],ucdata[5]);
return 0;
}
运行结果如下:
字符型数据在赋值-128到127之内,数据正常。
无符号字符型数据在赋值0到255之内,数据正常。
三、整型数据----取值范围
数据类型 | 数据类型符 | 字节数 | 数值范围 | 说明 |
---|---|---|---|---|
短整型 | short (short int) | 2 | -32768 ~ +32767 | 第一位是符号位:0是正数,1是负数。 剩下15位是数据位:-215 ~ 215-1 |
无符号短整型 | unsigned short | 2 | 0 ~ 65535 | 16位数据位:0 ~ 216-1 |
整型 | int | 4 | -2147483648~ +2147483647 | 第一位是符号位:0是正数,1是负数。 剩下31位是数据位:-231 ~ 231-1 |
无符号整型 | unsigned int | 4 | 0~ 4294967295 | 32位数据位:0 ~ 232-1 |
长整型 | long (long int) | 4 | -2147483648~ +2147483647 | 第一位是符号位:0是正数,1是负数。 剩下31位是数据位:-231 ~ 231-1 |
无符号长整型 | unsigned long | 4 | 0~ 4294967295 | 32位数据位:0 ~ 232-1 |
长长整型 | long long(long long int) | 8 | -9223372036854775808~ +9223372036854775808 | 第一位是符号位:0是正数,1是负数。 剩下63位是数据位:-263 ~ 263-1 |
无符号长长整型 | unsigned long long | 8 | 0~ 18446744073709551615 | 64位数据位:0 ~ 264-1 |
具体代码解析:
#include <stdio.h>
int main(int argc, char *argv[])
{
short sdata[7] ={-32769,-32768,-1,0,1,32767,32768} ;
printf("%d,%d,%d,%d,%d,%d,%d\n",sdata[0],sdata[1],sdata[2],sdata[3],sdata[4],sdata[5],sdata[6]);
unsigned short usdata[6] ={-1,0,1,32768,65535,65536} ;
printf("%d,%d,%d,%d,%d,%d\n",usdata[0],usdata[1],usdata[2],usdata[3],usdata[4],usdata[5]);
return 0;
}
运行结果如下:
四、浮点型数据----取值范围
数据类型 | 数据类型符 | 字节数 | 符号位 | 指数位 | 位数位 | 数值范围 | 有效数字(十进制) |
---|---|---|---|---|---|---|---|
浮点型 | float | 4 | 1 | 8 | 23 | -2 128~ +2128 约等于-3.4x1038 ~ +3.4x1038 | 8位 |
双浮点型 | double | 8 | 1 | 11 | 52 | -2 1024~ +21024 约等于-1.797x10308 ~ +1.797x10308 | 16位 |
取值范围(指数决定)
浮点型----float
float 指数位有8位,正常取值范围为0~256。
由于指数也是有正负的,所以存储数据时,是实际值加上 中间值127后存储的。
因此float 指数的取值范围是 -127 ~ 128。
所以float数据的取值范围:-2 128~ +2128
双浮点型----double
double 指数位有11位,正常取值范围为0~2048。
由于指数也是有正负的,所以存储数据时,是实际值加上 中间值1023后存储的。
因此float 指数的取值范围是 -1023 ~ 1024。
所以float数据的取值范围:-2 1024~ +21024
有效数字(尾数决定)
待更新。。。