人与类聚,物与群分。C语言中,提供了丰富的数据类型来描述生活中的各种类型,所谓的类型,就是将具有相同特征的数据归类在一起。使用整型类型来描述整数,使用浮点型来描述小数,使用字符类型来描述字符。下面是数据类型的思维导图:

接下来我就一个一个介绍吧~~
1.char //对应英文就是character 2.[signed] char //无符号的 3.unsigned char //有符号的
//整数 int - integer //短整型 1.short [int] 2.[signed] short [int] 3.unsigned short[int] //整型 4.int 5.[signed] int 6.unsigned int //长整型 7.long [int] 8.[signed] long [int] 9.unsigned long [int] //在c99中新引入的long long,更长整型 10.long long [int] 11.[signed] long long [int] 12.unsigned long long [int]
1.float 2.double 3.long double
bool
在刚才介绍的数据类型中,我们可以看到有 signed 和 unsigned 这样的字眼,那么我们现在就来介绍一下这两个关键字
C语言用signed和unsigned这两个关键字来修饰字符型和整型的 signed:表示一个类型的数据包含正负号,带有正负值; unsigned:表示这个类型的数据不带有负号,只能表示零和正整数
对于int 类型的数据,默认带有正负号,即signed int == int , 但是想要只表示非负整数的话,就要带上符号,即 unsigned int
应为在实际的编码中,我们使用正整数的情况会多于负整数,那么这时候使用unsigned的好处就体现出来了,举个例子吧
对于16位的 signed short int 这个类型,它的取值范围是: -32768 ~ 32768 而如果是 unsigned short int 这个类型,它的取值范围是: 0~65535 由此可见,在正数的情况下,使用unsigned会比signed的取值范围翻了一倍,增加了数据的容量
对于字符类型的数据,与整型类型有异曲同工之处 signed char ch //取值范围是-128 ~ 127 unsigned char ch //取值范围是 0 ~ 255
上述的数据类型有这么多,特别是整型,有short 、int、 long、long long四种之多,为什么呢?
这是因为,在实际的编码中,我们可能受到内存限制或者环境的影响,可以在对应的情况下 使用恰当的数据类型,来实现代码效率的最大化
在vs2022中:
<limits.h>这个头文件说明了整型变量的具体取值范围
<flaot.h>这个头文件说明了浮点型变量的具体取值范围
刚才我们讲解了数据的类型,就是为了给变量做铺垫。数据类型的作用是创建变量。我们将不变的量称之为常量,将需要改变的量称为变量
创建变量的格式如下:
data_type name;
| |
数据类型 变量名
例如:
int age; //一个名为age的整型变量
float num_input; //一个名为num_input的浮点型变量
char ch; //一个名为ch的字符型变量如果在变量名的后面赋值,那这个操作就叫做变量的初始化:
int age = 10;
double num_input = 23;
char ch = 'X';对于变量,C语言中也有分类:全局变量和局部变量
全局变量:
全局变量,在大括号之外定义的变量,其使用的范围是整个工程中。
#include<stdio.h>
int Global_Variable = 520; //这个就是全局变量
int main()
{
printf("%d", Global_Variable);
return 0;
}这里的Global_Variable就是全局变量。
局部变量:
局部变量,在大括号之内定义的变量,其使用的范围仅限于该大括号内
#include<stdio.h>
int main()
{
int Local_Variable = 520; //这个就是局部变量
printf("%d", Local_Variable);
return 0;
}这里的Local_Variable就是局部变量。
我用下面这个代码来更好的区分他们吧:
#include<stdio.h>
int Global_Variable = 520; //这个是全局变量
void test_func()
{
int Local_Variable = 51520; //这个是局部变量
printf("%d\n", Local_Variable);
}
int main()
{
test_func();
printf("%d\n", Global_Variable);
}运行结果为:

但如果,我将代码改成这样:
#include<stdio.h>
int Global_Variable = 520; //这个是全局变量
void test_func()
{
int Local_Variable = 51520; //这个是局部变量
printf("%d\n", Local_Variable);
}
int main()
{
//test_func();
printf("%d\n", Global_Variable);
}也就是注释掉test_func,来放大局部变量不在此区域的效果,那么运行结果为:

这样就能知道全局变量在整个工程中都能使用,但是局部变量这能在其大括号内使用
算术操作符,就是我们平常使用的加减乘除,分别对应 + 、- 、* 、/这几个符号,这几个属于双目操作符,就是要有两个数据才能使用的操作符。
#include<stdio.h>
int main()
{
int a = 2, b = 3, c = 9, d = 6;
printf("%d \n", a + b); //进行加法运算
printf("%d \n", c - a); //进行减法运算
printf("%d \n", a * b); //进行乘法运算
printf("%d \n", c / b); //进行除法运算
return 0;
}运行结果为:

在这里需要注意的是,在进行除法运算时,如果除号两边都是整数的话,那么结果也是整数,想要结果为小数,只需满足除号两边至少一个数据为浮点型即可
#include<stdio.h>
int main()
{
int a = 3, b = 9;
float c = 3.0, d = 9;
printf("%d \n", b / a);
printf("%f \n", d / c);
return 0;
}运行结果为:

这样就能直观地看出差异了。
还有一个运算符就是 %,求模运算符,即求余数。
#include<stdio.h>
int main()
{
int a=6,b=4;
printf("%d",a%b); //结果为2,6 / 4 =1...2
return 0;
}其中,负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
#include<stdio.h>
int main()
{
printf("%d\n", 6 % 4); //1
printf("%d\n", -6 % -4); //-1
printf("%d\n", -6 % 4); //-1
return 0;
}将一个数据初始化之后,再给它一个值,就叫赋值。
int age =20; //这里初始化为20
age = 50; //这里再给它赋值为50,那么最后这个age变量的值就是50也可以连续赋值:
int a = 6;
int b = 8;
int c = 0;
c = b = a + 3;//连续赋值,从右向左依次赋值。即b=a+3=9,c=b=9;,所以c最后的值为9单目操作符,就是只对一个数据进行操作的操作符,有:++、--、+(正)、-(负)
++、--:
“++”作用是让数据自增1;分为前置++与后置++
#include<stdio.h>
int main()
{
int a = 4;
int b = 6;
printf("%d\n",a++); //输出5
printf("%d\n",++b); //输出4
return 0;
}前置++为:先使用再自增
后置++为:先自增再使用
也就是说,哪个在前面,就是哪个先发挥作用
“--”与“++”相同,就是自减1。
+、-:
“+”对数据的正负值没有影响,写了也不影响 “-”对数据起到正负相反的作用,正数加上“-”变为负数,负数加上“-”变为正数。
顾名思义,就是强制将某种类型强制转换到另一种类型
int a = 5.20 //声明变量为int,但是却初始话为浮点数,这样编译器就会报错
int a = (int)5.20 //这样就叫做强制类型转换,将浮点数强制转换到整数,只取小数的整数部分,即5,此时 a = 5;注意,强扭的瓜不不甜,毕竟是强制转换,不在非必要的时候,尽量不要用
今天的文章就分享到这里吧~
文章是自己写的哈,有啥描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读。