@C语言基础复习
C语言基础复习
基本变量类型
int类型
int 整形 占4字节Byte 32bit
int 的表示范围 -2^31 ~ 2^31-1 (-2147483648~2147483647)
超过int的上下限会发生溢出
无符号整型 unsigned int 同样占有四个字节,但是把nt的最高位也用来表示数字,
因此范围比int大,但是却只能表示正数
void test_int(){
//int 整形 占4字节Byte 32bit
printf("int占有的字节数:\t%d\n", sizeof(int));
//int 的表示范围 -2^31 ~ 2^31-1 (-2147483648~2147483647)
printf("int的上限:\t%d\n", 2147483647);
printf("int的下限:\t%d\n", -2147483648);
//超过int的上下限会发生溢出
printf("int溢出啦:\t%d\n", 2147483647 + 1);
/*无符号整型 unsigned int 同样占有四个字节
但是吧int的最高位也用来表示数字,因此范围比int大
但是却只能表示正数*/
printf("\nunsigned int占有的字节数:\t%d\n", sizeof(unsigned int));
//unsigned int 的表示范围 0 ~ 2^32-1 (0~4294967295)
printf("unsigned int的上限:\t%u\n", 4294967295);
printf("unsigned int表示负数时会变成:\t%u\n", -20);
//超过int的上下限会发生溢出
printf("unsigned int溢出啦:\t%u\n", 4294967295 + 1);
}
运行截图:
其他整形
void other_int(){
//int的兄弟们有: short, long, long long
//基本性质和int相似
printf("short占有的字节数:\t%d\n", sizeof(short));
printf("long占有的字节数:\t%d\n", sizeof(long));
printf("long long占有的字节数:\t%d\n", sizeof(long long));
}
浮点类型
float : 单精度浮点数
double : 双精度浮点数
float(32位) :精确到小数点后6~7位
double(64位) :精确到小数点后15~16位
单精度浮点数在机内存占4个字节
双精度浮点数在机内存占8个字节
单精度浮点数有效数字8位
双精度浮点数有效数字16位
单精度浮点数的表示范围:-3.40E+38~3.40E+38
双精度浮点数的表示范围:-1.79E+308~-1.79E+308
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快
如果不声明,默认小数为double类型,所以如果要用float的话,必须进行强转
void test_float(){
float pi = 3.1415926535897932;
double pi1 = 3.14159265358979323846264338327950;
printf("float精度:\t%f\n", pi);
printf("double精度:\t%.16lf\n", pi1);
printf("float占有的字节数:\t%d\n", sizeof(float));
printf("double占有的字节数:\t%d\n", sizeof(double));
}
字符类型
字符型变量只占一个字节。
这点可能有点令人疑惑。
凭啥区区int都能占4字节,我堂堂字符不配拥有姓名吗?
其实这是因为C语言使用ascii码表示char,而ascii码使用8位二进制数表示一个字符,正好对应一个字节(Byte)。但是你会发现ASCII中没有中文。
早期在制定标准的时候,并且考虑到非拉丁字符。目前,计算机已经在全世界范围内使用。为了兼容早期的ASCII,高于127的数值,将会被用于其他语言字符。但是,这还是不够用于所有的非英文字符的。所以,中文字符会是由多个char组成(通常是2个)。
void test_char(){
//char只占有一个字节
char a = 'a';
printf("字符a%c:\t\n", a);
printf("char占有的字节数:\t%d\n", sizeof(a));
//不要给char类型变量传一个字符串,输出时会发生未知错误
char b = "abcdef";
printf("\n用char表示字符串:\t%c\n", b);
//使用char* 来指向字符串
//实际上你指定的字符串名字,就是指向字符串首字母的指针
char* c = "abcdef";
printf("\n用char*表示字符串:\t%s\n", c);
printf("\n两种操作字符串的方式:\n");
printf("\n1. c[i]:\t%c\n", c[2]);
printf("\n2. c + 2:\t%c\n");
}
指针类型
所有类型的指针,都只有四位长度。
其中void*为万用指针,可以和指向所有类型指针,而不进行强制转换
void test_point(){
//所有类型的指针,都只有四位长度
printf("int*占有的字节数:\t%d\n", sizeof(int*));
printf("char*占有的字节数:\t%d\n", sizeof(char*));
printf("short*占有的字节数:\t%d\n", sizeof(short*));
printf("long*占有的字节数:\t%d\n", sizeof(long*));
printf("float*占有的字节数:\t%d\n", sizeof(float*));
printf("double*占有的字节数:\t%d\n", sizeof(double*));
printf("void*占有的字节数:\t%d\n", sizeof(void*));
}