C

C 知识量:16 - 74 - 317

3.8 小结><

基本数据类型- 3.8.1 -

基本数据类型有11个关键字组成:int、long、short、unsigned、signed、char、float、double、_Bool、_Complex和_Imaginary。

1、有符号整型:可用于表示正整数和负整数。

  • int:系统给定的基本整数类型,不小于16位。

  • short或short int:最大的short类型整数小于或等于最大的int类型整数,short类型至少占16位。

  • long或long int:可表示的整数大于或等于最大的int类型整数,long类型至少占32位。

  • long long或long long int:可表示的整数大于或等于最大的long类型整数,long long类型至少占64位。

注意:一般情况下,long类型占用的内存比short类型大,int类型的宽度要么和long类型相同,要么和short类型相同。

2、无符号整型:只能用于表示零和正整数,因此,无符号整型可表示的正整数比有符号整型的大。

在整型类型前加上关键字unsigned就表明该类型是无符号整型:unsigned int、unsigned long、unsigned short。单独的unsigned相当于unsigned int。

3、字符类型:可打印出来的符号都是字符。char类型表示一个字符要占用1字节内存。

  • char:字符类型。有些编译器使用有符号的char,而有些则使用无符号的char。必要时可在char前面加上signed或unsigned来指明具体使用哪一种类型。

4、布尔类型:表示true和false。C语音用1表示true,0表示false。

  • _Bool:布尔类型。布尔类型是无符号int类型,占用的空间只要能储存0或1即可。

5、实浮点类型:可表示正浮点数和负浮点数。

  • float:系统的基本浮点类型,可精确表示至少6位有效数字。

  • double:储存浮点数的范围(可能)更大,可表示比float类型更多的有效数字(至少10位)和更大的指数。

  • long double:储存浮点数的范围(可能)比double更大,可表示比double更多的有效数字和更大的指数。

6、复数和虚数浮点数:虚数类型是可选的类型。复数的实部和虚部类型都基于实浮点类型来构建。

  • float _Complex

  • double _Complex

  • long double _Complex

  • float _Imaginary

  • double _Imaginary

  • long double _Imaginary

类型大小- 3.8.2 -

要知道C语言某个类型的大小,可以使用sizeof运算符,它是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11标准提供%zd转换说明匹配sizeof的返回类型(即:size_t类型)。一些不支持C99和C11的编译器可用%u或%lu代替%zd。

例如:打印基本数据类型的大小。

#include <stdio.h>

int main(void) {
    //打印short的类型大小
    printf("Type short is %zd bytes.\n", sizeof (short));
    //打印int的类型大小
    printf("Type int is %zd bytes.\n", sizeof (int));
    //打印long的类型大小
    printf("Type long is %zd bytes.\n", sizeof (long));
    //打印long long的类型大小
    printf("Type long long is %zd bytes.\n", sizeof (long long));
    //打印char的类型大小
    printf("Type char is %zd bytes.\n", sizeof (char));
    //打印float的类型大小
    printf("Type float is %zd bytes.\n", sizeof (float));
    //打印double的类型大小
    printf("Type double is %zd bytes.\n", sizeof (double));
    //打印long double的类型大小
    printf("Type long double is %zd bytes.\n", sizeof (long double));
    //打印_Bool的类型大小
    printf("Type _Bool is %zd bytes.\n", sizeof (_Bool));
    //打印float _Complex的类型大小
    printf("Type float _Complex is %zd bytes.\n", sizeof (float _Complex));
    return 0;
}

运行结果:

Type short is 2 bytes.
Type int is 4 bytes.
Type long is 4 bytes.
Type long long is 8 bytes.
Type char is 1 bytes.
Type float is 4 bytes.
Type double is 8 bytes.
Type long double is 12 bytes.
Type _Bool is 1 bytes.
Type float _Complex is 8 bytes.

刷新输出- 3.8.3 -

通常,printf()语句将输出发送到一个叫作缓冲区的中间存储区域,然后缓冲区的内容再被发送到屏幕上,从缓冲区把数据发送到屏幕或文件被称为刷新缓冲区。C语言标准明确规定了什么时候将缓冲区的内容发送到屏幕,分别是:

  • 当缓冲区满

  • 遇到换行字符

  • 需要输入

注意事项- 3.8.4 -

需要注意的事项:

  • 应当合理的选择要使用的变量及其类型。通常,用int或float类型表示数字,用char类型表示字符。

  • 使用变量前要先声明,并选择有意义的变量名。可以在变量名中体现数据类型,例如:i_前缀的名称表示int类型,f_前缀的名称表示float类型。

  • 初始化变量时应当使用与变量类型匹配的常数类型,如果不匹配,编译器会尝试把值转换成与变量匹配的类型,这通常会丢失部分数据和精度。

  • 对于printf()和scanf()函数来说,程序员要自己负责确保转换说明的数量、类型与后面参数的数量、类型匹配,C编译器的自动检测对这两个函数不起作用。