C语言学习笔记---2.C语言数据类型
阅读原文时间:2022年07月06日阅读:1

1.C语言基本数据类型

1.1 int类型

int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。其取值范围依计算机系统而异。一般而言,储存一个int要占用一个机器字长。

声明int类型变量:先写上int,然后写变量名,最后加上一个分号。要声明多个变量,可以单独声明每个变量,也可在int后面列出多个变量名,变量名之间用逗号分隔。

也可通过scanf函数获取;

int sows;
scanf("%d",sows);

初始化:在C语言中,初始化可以直接在声明中完成。只需在变量名后面加上赋值运算符(=)和待赋给变量的值即可。

int boars = 1;//等价于int boars; boars = 1;

打印变量:可以使用printf()函数打印int类型的值。第2章中介绍过,%d指明了在一行中打印整数的位置。%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。

printf("%d minus %d is %d\n", ten, 2, ten - two);

printf("\na = %d, b = %d, c = %d",a,b,c);
printf("\na = %o, b = %x, c = %#o",a,b,c);
printf("\na = %d, b = %#x, c = %#X",a,b,c);

在C程序中,既可以使用和显示不同进制的数。不同的进制要使用不同的转换说明。以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。
1.2 其他类型整形变量
C语言提供3个附属关键字修饰基本整数类型:short、long和unsigned。储存空间由少到多依次是:short int , int ,long int,long long int(除了int外其他都可将int省略),上述类型前面有关键词unsigned表示无符号整型变量,储存字节数不变,只能用于表示正数。
打印其他类型整型变量:

打印unsigned int类型的值,使用%u转换说明;打印long类型的值,使用%ld转换说明。

对于short类型,可以使用h前缀。%hd表示以十进制显示short类型的整数,%ho表示以八进制显示short类型的整数

h和l前缀都可以和u一起使用,用于表示无符号类型。例如,%lu表示打印unsigned long类型的值。

short d = 20;  
long e = 4096;  
long long g = 20900000;  
unsigned short d\_1 = 20;  
unsigned long e\_1 = 9999;  
unsigned long long g\_1 = 99999999;  
printf("\\nd = %hd , e = %ld, g = %lld\\n",d,e,g);  
printf("d\_1 = %hu, e\_1 = %lu, g\_1 = %llu",d\_1,e\_1,g\_1);

2.char类型变量

char类型用于储存字符(如,字母或标点符号),但是从技术层面看,char是整数类型。
2.1申明char类型

char类型变量的声明方式与其他类型变量的声明方式相同。

char response;
char itable,latan;

2.2字符常量和初始化

在C语言中,用单引号括起来的单个字符被称为字符常量(character constant)。

char broiled;   /* 声明一个char类型的变量 */
broiled = 'T';  /* 为其赋值,正确 */
broiled = T;   /* 错误!此时T是一个变量 */
broiled = "T";  /* 错误!此时"T"是一个字符串 */

C语言将字符常量视为int类型而非char类型。

2.3 非打印字符

单引号只适用于字符、数字和标点符号,浏览ASCII表会发现,有些ASCII字符打印不出来。例如,一些代表行为的字符(如,退格、换行、终端响铃或蜂鸣)
C语言提供了3种方法表示这些字符:

  1.使用ASCII码例如蜂鸣字符的ASCII值是因此可以这样写:

char beep = 7;

  2.使用特殊的符号序列表示一些特殊的字符,把转义序列赋给字符变量时,必须用单引号把转义序列括起来。例如:

char nerf = '\n';

  3.用十六进制形式表示字符常量,即反斜杠后面跟一个x或X,再加上1~3位十六进制数字

2.4打印字符
printf()函数用%c指明待打印的字符,例如:

char ch;
ch = 'D';
printf("ch = %c",ch);

3.浮点类型变量float,double,long double

3.1浮点类型声明

float noah, jonah;
double trouble;
float planck = 6.63e-34;
long double gnp;

3.2浮点类型常量

浮点型常量的基本形式是:有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号数表示10的指数。例如:-1.56E+12,2.87e-3

正号可以省略。可以没有小数点(如,2E5)或指数部分(如,19.28),但是不能同时省略两者。可以省略小数部分(如,3.E16)或整数部分(如,.45E-6),但是不能同时省略两者。

默认情况下,编译器假定浮点型常量是double类型的精度。

C99 标准添加了一种新的浮点型常量格式:用十六进制表示浮点型常量,即在十六进制数前加上十六进制前缀(0x或0X),用p和P分别代替e和E,用2的幂代替10的幂(即,p计数法)例如:0xa.1fp10

十六进制a等于十进制10,.1f是1/16加上15/256(十六进制f等于十进制15),p10是1024。0xa.1fp10表示的值是(10 + 1/16 +15/256)×1024(即,十进制10364.0)。

3.3打印浮点数

printf()函数使用%f转换说明打印十进制记数法的float和double类型浮点数,用%e打印指数记数法的浮点数。如果系统支持十六进制格式的浮点数,可用a和A分别代替e和E。打印long double类型要使用%Lf、%Le或%La转换说明。

float data = 3.3E9;  
double data\_1 = 1.2e-10;  
printf("data is %f ,equal %e",data, data);

4.sizeof函数

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

例如:

printf("data is %f ,equal %e\\n",data, data);  
printf("Type int has a  size  of  %zd  bytes.\\n",sizeof(int));  
printf("Type  char  has  a  size  of  %zd  bytes.\\n",sizeof(char));  
printf("Type  long  has  a  size  of  %zd  bytes.\\n",sizeof(long));  
printf("Type  long  long  has  a  size  of  %zd  bytes.\\n",sizeof(long long));  
printf("Type  double  has  a  size  of  %zd  bytes.\\n",sizeof(double));  
printf("Type  long  double  has  a  size  of  %zd  bytes.\\n",sizeof(long double));

结果:

Type int has a size of 4 bytes.
Type char has a size of 1 bytes.
Type long has a size of 4 bytes.
Type long long has a size of 8 bytes.
Type double has a size of 8 bytes.
Type long double has a size of 16 bytes.