C语言——数据类型、基本数据类型的取值范围-创新互联
目录
创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为烟台企业提供专业的成都网站设计、网站建设,烟台网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。一、数据类型
1.基本类型
2.sizeof运算符
3.signed和unsigned
二、取值范围
1.比特位
2.字节
3.符号位
4.补码
5.基本数据类型的取值范围
一、数据类型1.基本类型
(1)整数类型
- short int
- int
- long int
- long long int
(2)浮点数类型
- float
- double
- long double
(3)字符类型
- char
(4)布尔类型
- _Bool
(5)枚举类型
- enum
sizeof 运算符用于获得数据类型或表达式的长度
如:-sizeof(object); //sizeof(对象)
-sizeof(type_name); //sizeof(类型)
-sizeof object; //sizeof 对象
代码举例:
#includeint main()
{
int i;
char j;
float k;
i = 123;
j = 'C';
k = 3.14;
printf("size of int is %d\n",sizeof(int));
printf("size of i is %d\n",sizeof(i));
printf("size of char is %d\n",sizeof(char));
printf("size of j is %d\n",sizeof j);
printf("size of float is %d\n",sizeof(float));
printf("size of k is %d\n",sizeof k);
return 0;
}
代码运行结果:
分别打印各类型所占字节:
#includeint main()
{
printf("int = %d\n",sizeof(int));
printf("short int = %d\n",sizeof(short));
printf("long int = %d\n",sizeof(long));
printf("long long int = %d\n",sizeof(long long));
printf("char = %d\n",sizeof(char));
printf("_Bool = %d\n",sizeof(_Bool));
printf("float = %d\n",sizeof(float));
printf("double = %d\n",sizeof(double));
printf("long double = %d\n",sizeof(long double));
return 0;
}
运行结果(设备不同,结果可能也不同):
3.signed和unsignedsigned:代表有符号的,第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127。(默认为signed)
unsigned:代表无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255。
- [signed] short [int]
- unsigned short [int]
- [signed] int
- unsigned int
- [signed] long [int]
- unsigned long [int]
- [signed] long long [int]
- unsigned long long [int]
代码举例:
#includeint main()
{
short i;
unsigned short j;
i = -1;
j = -1;
printf("%d\n",i);//d为打印带符号的
printf("%u\n",j);//u为打印不带符号的
return 0;
}
运行结果:
可见,打印 j 时,结果并不是我们期望出现的-1,而是65535,这与数据类型的取值范围有关。
二、基本数据类型的取值范围 1.比特位CPU能读懂的最小单位是:比特位,bit,b。每个比特位只能存放二进制数,即0和1.
2.字节内存机构最小寻址单位:字节,Byte,B
注:1Byte = 8 bit
一个字节能存放的大的数()用二进制表示为:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
该数转化为十进制为:2147483647
补充:进制
打印,代码如下:
# include#includeint main()
{
unsigned int result = pow(2,32) - 1;
printf("result = %u\n",result);
return 0;
}
运行结果:
注意:若不加“unsigned”,则输出结果为2147483647.这是因为默认情况下int是signed类型的,也就是说左边第一位是符号位,所以必须加“unsigned”来使其变为一个无符号的整型变量,使得32位都用来存放数值。
3.符号位- 存放signed类型的存储单元中,左边第一位表示符号位。如果该位为0,表示该整数是一个正数;如果该位为1,表示该整数是一个负数。
- 一个32位的整型变量,除去左边第一位符号位,剩下表示值的只有31个比特位。
- 正数的补码是该数的二进制形式。
- 负数的补码需要通过以下几步获得:
(1)先取得该数的绝对值的二进制形式
(2)再将第1步的值按位取反(除符号位)
(3)最后将第2步的值加1
例如:
5.基本数据类型的取值范围数据类型 | 字节数 | 取值范围 |
char | 1 | -128~127 |
unsigned char2 | 1 | 0~255 |
short | 2 | -32768~32767 |
unsigned short | 2 | 0~65535 |
int | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
long | 4 | -2147483648~2147483647 |
unsigned long | 4 | 0~4294967295 |
long long | 8 | -9223372036854775808~9223372036854775807 |
unsigned long long | 8 | 0~18446744073709551615 |
数据类型 | 字节数 | 取值范围(绝对值) |
float | 4 | 1.17549*10^-38~3.40282*10^38 |
double | 8 | 2.22507*10^-308~1.79769*10^308 |
long double | 12 | 2.22507*10^-308~1.79769*10^308 |
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:C语言——数据类型、基本数据类型的取值范围-创新互联
文章源于:http://abwzjs.com/article/cecphs.html