万水千山总是情,点点关注行不行。
一声朋友一生情,点点关注才能行!
文章目录
- 1.数据类型介绍
- 1.1内置类型
- 1.1.1字符型:
- 1.1.2整型:
- 1.1.3浮点型:
- 1.1.4布尔类型:
- 1.2自定义类型
- 1.3类型长度
- 2.signed 和 unsigned
- 3.变量
- 3.1创建变量
- 3.2变量的分类
- 4.操作符
- 4.1算数操作符
- 4.2赋值运算符
- 4.3单目操作符
- 4.3.1前置++与后置++
- 4.3.2前置–和后置–
- 4.3.3+和-
- 5.强制转换
1.数据类型介绍
C语言提供了丰富的数据类型来记录描述现实的数据。我们通常使用整型描述整数;浮点型描述小数;字符型描述字符;编译器只有知道数据的类型才知道怎么操作,这也是我们经常说的学好编程,就要体会计算机是如何思考的。#
1.1内置类型
1.1.1字符型:
#include int main() { char a = "x" ;//用char来声明字符变量 //当然还细分两种,有符号型和无符号型 //[signed] char有符号型 //unsigned char无符号型 return 0 ; }
1.1.2整型:
#include int main() { int a = 0 ;//用int来声明整型变量 //当然还细分两种,有符号型和无符号型 [signed] int = -10 ; // 有符号型,数据能容纳的范围是有大小的。 unsigned int = 10;//无符号型,虽然不能表示负数,但是能表示的正整数范围大了一倍 short[int] = 1 ; //范围比int更小的整形变量,也分有符号型和无符号型,与上面类似 long[int] = 654987;//范围比int更大,同样分为有符号型和无符号型 return 0 ; }
1.1.3浮点型:
#include int main() {float a = 3.14 ;//用float来声明浮点型变量double a =3.1415926;//double可以表示的小数更精准 return 0 ; }
1.1.4布尔类型:
使用布尔类型需包含头文件 (#include)
在C语言最初并没有为布尔类型专门设置一个类型,而是用0表示假,非零表示真。但在后来C99的标准中引入了布尔类型,专门用于表示真假。需要注意的是布尔类型的变量取值只能是true 或false
代码演示如下
#include#include int main() { _bool WCY = true ; if(WCY) printf("i love world"); return 0 ; }
1.2自定义类型
1.数组 2.结构体-struct 3.枚举-enum 4.联合体-union
1.3类型长度
每一种数据类型都有自己的长度,我们通过创建不同的变量,来控制存储数据的范围。通过提高存储数据的利用率来不断优化写出来的程序。为了计算数据类型的长度,这里引入“sizeof”,它不仅是一个关键字,也是操作符,专门用来计算操作符类型的长度,单位是字节。“sizeof”既可以计算数据类型,也可以计算表达式,但使用有细微区别。
sizeof(类型)
sizeof 表达式
sizeof 的计算值结果为size_t类型。
C语言规定size of的返回值是无符号整数,并没有规定具体的类型,而是给系统自己决定,然在不同系统中,返回值的类型可能是 unsigned int‘;unsigned long int;unsigned long long int,这样导致printf函数在打印时,占位符分别是%u %lu %llu。这样不利于程序的移植
C语言提供了一种解决,创建了一个类型别名size_t 用来同意表示sizeof的返回值。
比如:
#includeint main(){printf("%zd",sizeof(char));//输出结果为1(单位都是字节) printf("%zd",sizeof(_bool));//输出结果为1 printf("%zd",sizeof(short));//输出结果为2 printf("%zd",sizeof(int));//输出结果为4 printf("%zd",sizeof(long));//输出结果为4 printf("%zd",sizeof(long long));//输出结果为8 printf("%zd",sizeof(float));//输出结果为4 printf("%zd",sizeof(double));//输出结果为8 printf("%zd",sizeof(long double));//输出结果为8return 0 ;}
sizeof的计算并不是真正的“计算”
例如
#includeint main(){int a =2;int b = 0;printf("%d\n",sizeof(a=b+1) );//打印4//而这里计算过程是,计算机认为b是整型,在+1后依然为整型,固计算结果为4printf("%d",a);//打印2//在这里,sizeof在编译时,就根据表达式确定了类型,而表达式的执行却要在程序运行期间才能执行//在编译期间已经被sizeof处理了,所以运行时不会执行表达式return 0;}
2.signed 和 unsigned
C语言使用signed和unsigned来修饰整型和浮点型。
signed表示带有正负号
unsigned表示不带有正负号
使用unsigned的好处是,同样长度的内存,能表示的最大整数值增大了一倍
比如short int取值范围是(-32768~32767)而unsigned short int取值范围(0~655535)
当然这些不死记硬背,没有用,我们需要使用时可以在文件里查找:
在limits.h文件中查找整型的取值范围
在float.h这个头文件里面查找浮点型类型的取值范围
- SCHAR_MIN , SCHAR_MAX : signed char的最小值和最大值
- SHRT_MIN , SHRT_MAX : signed short int的最小值和最大值
- INT_MIN , LONG_MAX : long的最小值和最大值
- LLONG_MIN , LLONG_MAX :long long的最小值和最大值
- UCHAR_MAX : unsigned char的最大值
- USHRT_MAX : unsigned short的最大值
- UINT_MAX : unsigned int的最大值
- ULONG_MAX : unsigned long 的最大值
- ULLONG_MAX :unsigned long long 的最大值
3.变量
3.1创建变量
我们学习数据类型的目的就是创建变量。变量的创建语法如下
#includeint main(){int a = 0;//这个过程就是在创建变量retrurn 0 ;}
在创建变量的时候给一个初始值,就叫初始化。此外创建的变量名不能是关键字。
3.2变量的分类
- 全局变量:大括号外部定义的变量就是全局变量
全局变量作用更广泛,是整个工程中都有办法使用的变量 - 局部变量:大括号内部定义的变量就是局部变量
局部变量只能在自己所在局部使用,但如果局部变量与全局变量同名,局部变量优先
变量都是储存在内存里的:
1.局部变量是放在内存的栈区
2.全局变量是放在内存的静态区
3.堆区是用来动态内存管理的
4.操作符
4.1算数操作符
C语言中为了方便运算,提供一系列操作符,而算数操作符分别是“ +,-, *, /,% “,这些操作符都是双目操作符,也就是都有两个操作数。加减乘正常使用,除法和求模单独讲一下
- /
除号两端如果是整数,执行的是整数除法,会丢弃小数部分。
比如
#includeint main(){int a = 5;printf("%d",a = 5/2);//输出结果为2printf("%f",a = 5.0 /2);//输出结果为2.500000,想限制小数位数只需要在f前面加0.x(x代表位数)return 0:}
- %
求模运算,返回的是两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
负数求模的规则是,结果由第一个运算符的正负号决定
4.2赋值运算符
在写代码时,尤其是循环语句里经常会出现一个数自增或者自减,C语言提供简写
例如
a=a+3 可以写成a+=3
a=a-3 可以写成a -=3
常见的赋值符
+= | – = | |
---|---|---|
* = | /= | %= |
>>= | <<= | |
&= | ^= |
4.3单目操作符
4.3.1前置++与后置++
前置++计算口诀:先+1后使用
后置++计算口诀:先使用,后+1
#includeint main(){int a=6;int b=a++;//后置++printf("%d %d",a,b);//打印的值为77return 0 ;}
#includeint main(){int a=6;int b=a++;//前置++printf("%d %d",a,b);//打印的值为76return 0 ;}
4.3.2前置–和后置–
- 与前置++和后置++类似
前置–计算口诀:先-1后使用
后置–计算口诀:先使用,后-1
4.3.3+和-
- 这里的+和-不是运算符,代表的是正负号
5.强制转换
操作符中还有一种简单粗暴的特殊操作符,语法很简单
(类型)
例如
#includeint main()//int a = 3.1415;编译器是会报错的,因为int表示整型int a =(int)3.1415 ;//这样写是不会报错的,因为把3.1415强制转化成整型了 return 0 ;}
缺点就是会造成数据缺失,例如3.1415强制转化成整型就是3,小数部分舍弃了。
刚刚一辆豪车从我身边开过,溅得我一身水,当时我就发誓,等我有钱了,我一定要买一套属于自己的雨衣,笑了没,笑了就点个赞。
(挑灯夜战,如有错误,麻烦各位大佬评论区指正,感谢!)