数据类型介绍
数据类型是指在程序中可以使用的不同种类的数据,比如整数、小数、字符、布尔值等。不同的数据类型占用的内存空间和表示的范围也不同。C语言中,有以下几种基本的数据类型:
- int:表示整数,如1,-5,6等。
- float:表示单精度浮点数,即带有小数点的数,如3.144,-0.5,5.0等。
- double:表示双精度浮点数,即比float更精确的小数,如3.14159,-0.00001,0.1111等。
- char:表示单个字符,如’w’,'3’等。字符用单引号括起来。
- bool:表示布尔值,即真或假。用0和非0表示。
以下是一些不同数据类型的声明:
//1.1 字符
char
signed char
unsigned char
//1.2 整型
//短整型
short int
signed short int
unsigned short int
//整型
int
signed int
unsigned int
//长整型
long int
signed long int
unsigned long int
//更长的整形
long long int
signed long long int
unsigned long long int
//1.3浮点型
float
double
long double
//1.4布尔类型
//C语言中原来没有为布尔值单独设置一个类型,而是使用整数0表示假,非零表示真。在C99中也引入了布尔类型,是专门表示真假的。
_Bool
// 布尔类型的使用的包含头文件<stdbool.h>
//布尔类型的取值是:ture或者false.
#include <stdio.h>
_Bool flag = ture;
int main()
{
if (flag)
printf("i like C");
return 0;
}
signed和unsigned
在C语言中,int和char类型的变量可以有两种符号性:signed和unsigned。符号决定了变量可以表示的正负数的范围。
- signed:表示有符号的,既可以表示正数、负数和零。默认情况下,int和char类型的变量都是signed的。
- unsigned:表示无符号的,即只能表示非负数,即零和正数。如果要声明一个unsigned类型的变量,需要在int和char前加上unsigned关键字。
注意,如果给一个unsigned类型的变量赋值一个附属,或者给一个signed类型的变量赋值一个超过其范围的正数,会发生溢出,即数据会被截断或者循环。例如:
unsigned int a = -1;//实际会被赋值为4294967295,即2^32-1
signed in b = 2147483648;//b实际会被赋值为-2147483648,即-2^31
数据类型的取值范围
数据类型的 取值范围是指变量可以表示的最小值和最大值。不同数据类型和符号性有不同的取值范围。取值范围和变量占用的内存空间有关,一般来说,占用的空间越大,取值范围越大。不同的编译器给变量分配的字节数也可能不同,所以取值范围也可能有差异。我们可以用sizeof函数来获得类型占据的字节数。例如:
变量
变量的创建
了解清楚类型之后,我们能使用类型干什么呢?类型就是用来创建变量的。变量有三个属性:名称、类型和值。
在C语言中,我们使用变量必须先声明它,即指定他的类型和名称。它的一般格式是:
//类型 变量名
//例如:
int a;//声明一个int类型的变量a
float b;//声明一个float类型的变量b
char c;//声明一个char类型的变量c
//声明变量时,也可以给它赋值,即初始化。初始化变量的一般格式为:
//类型 变量名 = 初始值;
int a = 10;
float b = 1.5f;
char c = 'w';
如果没有给变量赋值,那么他会有一个不确定的值,可能是垃圾数据,也可能是0.所以为了避免出错,最好给一个和=合适的初始值。
变量的分类
变量分为全局变量和局部变量。
- 全局变量:在大括号外部定义的变量就是全局变量,全局变量的使用更广泛,整个工程中都是可以使用的
- 局部变量:在大括号内部定义的变量就是局部变量,局部变量的适用范围比较局限,只能在自己所在的局部范围使用。
#include <stdio.h>
int name = kiki;//全局变量
int main()
{
int age = 20;//局部变量
printf("%d\n",age);
printf("%d\n",name);
return 0;
}
当局部变量和全局变量名字相同,局部优先。
#include <stdio.h>
int a = 10;
int main()
{
int a = 5;
printf("a = %d\n",a);//打印为a = 5,局部优先
return 0;
}
全局变量和局部变量在内存中存储在哪里呢?
算术操作符
算术操作符是用来对数据进行数学运算的符号,比如加、减、乘、除等。在C语言中,有以下几种算术操作符:
- +:表示加法,用来计算两个数的和,例如a + b。
- -:表示减法,用来计算两个数的差,例如a - b。
- *:表示乘法,用来计算两个数的积,例如a * b。
- /:表示除法,用来计算两个数的商,例如a / b。
- %:表示取余,用来计算两个整数相除后的余数,例如a % b。
int a = 10,b = 5
int c = a + b;//c = 15
int d = a - b;//c = 5
int e = a * b;//c = 50
int f = a / b;// c = 2
int g = a % b;// c = 0
其中,当两个整数相除时,结果会被截断为整数,即舍去小数部分。如果想得到小数结果,需要转换为浮点数。
float c = 11/2f;
赋值操作符
赋值操作符是用来给变量赋值的符号,比如=。在C语言中,有以下几种赋值操作符:
- =:表示简单赋值,用来将右边的值赋给左边的变量,例如a = b。
- +=:表示加法赋值,用来将左边的变量加上右边的值,并将结果赋给左边的变量,例如a += b相当于a = a + b。
- -=:表示减法赋值,用来将左边的变量减去右边的值,并将结果赋给左边的变量,例如a -= b相当于a = a - b。
- *=:表示乘法赋值,用来将左边的变量乘以右边的值,并将结果赋给左边的变量,例如a *= b相当于a = a * b。
- /=:表示除法赋值,用来将左边的变量除以右边的值,并将结果赋给左边的变量,例如a /= b相当于a = a / b。
- %=:表示取余赋值,用来将左边的整数变量除以右边的整数值,并将余数赋给左边的变量,例如a %= b相当于a = a % b。
int a = 10, b = 3;
a += b; // a的值是13
a -= b; // a的值是10
a *= b; // a的值是30
a /= b; // a的值是10
a %= b; // a的值是1
单目操作符
单目操作符是只需要一个操作数的符号,比如++、–、+、-等。在C语言中,有以下几种单目操作符:
- ++:表示自增,用来将操作数的值加1,并返回新的值,例如a++。
- –:表示自减,用来将操作数的值减1,并返回新的值,例如a–。
- +:表示正号,用来表示操作数的正值,例如+a。
- -:表示负号,用来表示操作数的负值,例如-a。
int a = 10;
int b = ++a; // a的值是11,b的值是11
int c = a++; // a的值是12,c的值是11
int d = --a; // a的值是11,d的值是11
int e = a--; // a的值是10,e的值是11
int f = +a; // f的值是10
int g = -a; // g的值是-10
注意,++和–操作符有两种形式:前缀和后缀。前缀形式是将操作符写在操作数之前,例如++a。后缀形式是将操作符写在操作数之后,例如a++。两种形式都会改变操作数的值,但返回的值不同。前缀形式会先改变操作数的值,然后返回新的值。后缀形式会先返回原来的值,然后改变操作数的值。所以在使用++和–操作符时要注意区分前缀和后缀。