数据类型
分类:
基本类型:
C语言没有限制过 int 和 short int 多大,之规定了小于等于的关系,即short int 小于等于int
那么我们如何计算数据的大小呢?
C语言提供了一个运算符 sizeof
sizeof运算符用于活的数据类型或表达式的长度
sizeof 使用规则
- sizeof(object); //sizeof(对象)
- sizeof(type_name); //sizeof(类型)
- sizeof object; //sizeof 对象
例1:
#include <stdio.h>
#define YEAR 2022
#define MONTH 1
#define DAY 2
#define WEATHER "晴天"
int main()
{
int i;
char j;
float k;
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 YEAR is %d\n",sizeof YEAR);
printf("size of WEATHER is %d\n",sizeof WEATHER);
return 0;
}
运行结果:
例2:
#include <stdio.h>
int main()
{
printf("size of int is %d\n",sizeof(int));
printf("size of short int is %d\n",sizeof(short int));
printf("size of long int is %d\n",sizeof(long int));
printf("size of long long int is %d\n",sizeof(long long int));
printf("size of char is %d\n",sizeof(char));
printf("size of _Bool is %d\n",sizeof(_Bool));
printf("size of float is %d\n",sizeof(float));
printf("size of double is %d\n",sizeof(double));
printf("size of long double is %d\n",sizeof(long double));
return 0;
}
运行结果
signed (有符号) VS unsigned(无符号)
取值范围
比特位:CPU能读懂的最小单位,bit b
字节:内存机构的最小寻址单位,Byte B
关系:一个字节等于八个比特位 1 Byte = 8 bit
所以一个字节可以表示的最大数字就是11111111(二进制)=255(十进制)=FF(十六进制)
补充:
pow() 函数
功能:pow()函数用来求x的y次幂,然后将结果返回
原型为double pow(double x,double y);设输出为Z,Z=x^y
头文件:#include<math.h>
例子:求32个字节代表多少?(2^32-1, 利用pow()函数计算)
#include <stdio.h>
#include <math.h>
int main()
{
int result = pow(2,32) - 1;
printf("result = %d\n",result);
return 0;
}
运行结果
对比计算器计算结果
我们发现两者不一致,编译器发出警告
E:\c++\1\pow\main.c|6|warning: overflow in conversion from ‘double’ to ‘int’ changes value from ‘4.294967295e+9’ to ‘2147483647’ [-Woverflow]|
意思是有数据溢出,因为我们直接用Int表示的是带符号位的整型,他的最高位用来表示数字的正负,所以我们这里应该使用无符号位的整型来表示。
修改代码
#include <stdio.h>
#include <math.h>
int main()
{
unsigned int result = pow(2,32) - 1;
printf("result = %u\n",result);
return 0;
}
修改部分:
注意:无符号位的要用%u表示。
修改后运行结果:
运行结果发现与计算结果一致。
补充数据类型对应的取值范围:
设置 int类型就是默认signed int (不过还是要注意,可能有些编译器默认的数据类型不一样)
例:
#include <stdio.h>
int main()
{
char height;
height = 180;
printf("姐姐的腿长%d厘米\n",height);
return 0;
}
运行结果
发现居然出现了负数!!!为什么呢???
因为我们存放长度都是正数,所以我们需要用unsigned类型来确存放的数值为正数。
修改代码:
#include <stdio.h>
int main()
{
unsigned char height;
height = 180;
printf("姐姐的腿长%d厘米\n",height);
return 0;
}
运行结果: