数据类型
在C语言中,每种数据类型的大小都不一样,具体如下:
数据类型 | 大小(字节) |
---|---|
short int | 2~4 |
int | 4 |
long int | 4~8 |
long long int | 8~ |
float | 4 |
double | 8 |
long double | 12~16 |
char | 1 |
bool | 1 |
其中bool(布尔)类型是C99新添加的数据类型,只返回ture(1)和flase(0)两个值。
比特位(bit),是CPU能读取的最小单位
字节(Byte),内存最小寻址单位
1Byte = 8bit
转换字符
使用printf函数打印时,比如 int 对应的 %d,这个%d是格式化占位符,用于指明输出的参数值如何格式化。
其格式如下:
%[flags][width][.precision][length]specifier
width,宽度。是一个数值,用于指定最小字段的宽度;
.precision,精度通过 ‘.’ 分隔字段的宽度和精度,点号后面代表小数点后面的位数。
以 double 为例,%11.9f 的意思是该数据宽度为11(包括小数点),小数点后有9位,转换字符为f,代表浮点数。总结起来就是——总长度为11,小数点后为9位的浮点数。
转换字符如下:
类型限定符
signed表示无符号类型,signed带符号位,可以存负数;unsigned则不行,只能保存正数和0;转换字符为%u。
默认情况下数据都是signed类型,该类型的存储单元中,左边第一位是符号位,为0表示正数;为1表示负数。该类型能够限定char和整型变量取值范围。
数据类型大小验证实验
本实验通过sizeof函数获取数据类型的长度。
sizeof运算符用于获得数据类型或者表达式的长度,其用法有以下几种:
sizeof(变量名)
sizeof 变量名
sizeof(数据类型)
如果sizeof后是变量名的话是可以不加()的;但是数据类型必须加。为了防止出错建议sizeof的使用都带上括号。
以下是通过DEV C++进行演示的代码及结果:
#include <stdio.h>
int main(void)
{
int a;
char b;
float c;
double d;
unsigned short e;
char f;
/* 为了确定字符串结束的位置,需要在字符串末尾加 '\0' ,所以字符串大小 = 字符数+1
部分编译器可以忽略这个问题,但另一部分编译器需要留出 '\0' 的位置并在字符串末尾加上 */
char g[12] = {'H','e','l','l','o',' ','W','o','r','l','d','!'};
/* 字符串常量不需要添加 '\0' ,也可以去掉 '{}' */
char h[] = {"你好,世界!"};
//char h[] = "你好,世界!";
int i[10] = {1,2,3,4,5,6,7,8,9};
bool j;
bool k;
a = 100;
b = 'b';
c = 3.14;
d = 3.1415926;
e = 123;
f = 67;
k = 100;
printf("short int 大小为:%d\n",sizeof(short int));
printf("short 大小为:%d\n",sizeof(short));
printf("int 大小为:%d\n",sizeof(int));
printf("long int 大小为:%d\n",sizeof(long int));
printf("long long int 大小为:%d\n",sizeof(long long int));
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));
printf("整数 a 大小为:%d\n",sizeof(a));
printf("字符 b 大小为:%d\n",sizeof b );
printf("单精度浮点数 c 大小为:%d\n",sizeof(c));
printf("双精度浮点数 d 大小为:%d\n",sizeof d );
printf("字符串 g[12] 大小为:%d\n",sizeof g );
printf("数组 i[10] 大小为:%d\n",sizeof i );
printf("%d\n",e);
printf("%c = %d\n",b,b);
printf("%c\n",f);
printf("%s\n",g);
printf("%s\n",h);
printf("%d\n",j);
printf("%d\n",k);
}