常见的数据类型
介绍
数据类型是C语言提供的用于描述生活中的各种数据的
所谓“类型”,即相似的数据所拥有的共同特征,编译器需要先明白我们所输入的数据类型,才能做出我们所理想的操作
总体来说数据类型分为两大类:内置类型和自定义类型
接下来将对其做较为具体的介绍,我们最好是能在实际运用中慢慢理解其适用情景
内置类型
字符型
- char //有符号的(占位符为c)
- 可用于存储字符,例如英文字母、字符或标点,如下:
- 可用于单个字符的输入与输出,如下:
- 声明字符串位数(必须比实际输入字符串多一位,给终止\0留空间),字符串的存储,输入与输出(占位符为%s)
- unsigned char //无符号的(占位符为%hhu)
首先在内存中,char和unsigned char没有什么不同,都是一个一节,唯一的区别是,char的最 高位为符号位,因此char能表示-128~127,unsigned char没有符号位,因此能表示0~255。
整型
短整型
- short(占位符为%d)
- 可用于表示较小的整数,可以节省内存空间
- 可用于进行加减乘除运算,可以将short的变量赋给其他short变量
此处需要注意的是,不能超过short的范围
- 可以用于存储字符数据,因为字符数据也可以表示为整数
- unsigned short(占位符为%hu)
同上(unsigned char与char),也不能存储负数
整型
- int(占位符为%d)
- 声明变量,存储数据
- 声明整数数组,变量,初始化变量
- 同样可进行加减乘除,将int的变量赋给其他int变量
(此处小编就不做例子了,读者可根据上述内容,自行去练习)
- unsigned int(占位符为%u)
长整型
- long (占位符为%ld)//在处理比较大的整数时,可以使用此类型来存储数据
- unsigned long(占位符为%lu)
更长的整型
- long long(占位符为%lld) //在处理更大的整数时,用此类型
- unsigned long long(占位符为%llu)
浮点型
- float(占位符为%f)
- 用于存储单精度浮点数,它通常用于需要小数点的数值,例如科学计数法或金融计算
- 声明变量与初始化变量
- 使用单精度浮点数进行计算
- 格式化输入输出数值
- double(占位符为%lf或%f)
- 用于表示双精度浮点数,相较于float,它可以存储更大范围和更高精度的实数值
- 声明变量与初始化变量
- 使用双精度浮点数进行计算
(同样,请读者参照上述类似例子自行去练习)
- long double(占位符为%lf)
相比于double,此类型更高精度
sizeof操作符(占位符为%zd)
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字
节。
sizeof 操作符的操作数可以是类型,也可以是变量或者表达式。
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
1.sizeof(类型)
2.sizeof 表达式
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。
sizeof 的计算结果是 size_t 类型的。
数据类型的长度
每一种数据类型都有自己的长度,使用不同的数据类型创建出长度不同的变量
变量的长度不同,存储的数据范围就有所差异
下面是常见数据类型长度,单位是字节
signed和unsigned
C 语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型
signed 关键字,表⽰⼀个类型带有正负号,包含负值;
unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。
例如对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int
由于这是默认情况,关键字 signed ⼀般都省略不写,但是写了也不算错
变量
创建
了解清楚了类型,那我们使用类型是用来做什么的?类型是用来创建变量的
C语言中把经常变化的值称为变量,不变的值称为常量
如果在创建的时候就给一个初始值,就叫初始化
分类
- 全局变量
在⼤括号外部定义的变量就是全局变量全局变量的使⽤范围更⼴,
整个⼯程中想使⽤,都是有办法使⽤的。
- 局部变量
在⼤括号内部定义的变量就是局部变量
局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。
注意:当全局变量和局部变量相同时,局部变量优先使用
变量存储位置
⼀般我们在学习C/C++语⾔的时候,我们会关注
内存中的三个区域:栈区、堆区、静态区。
1. 局部变量是放在内存的栈区
2. 全局变量是放在内存的静态区
3. 堆区是⽤来动态内存管理的
算术操作符
+对应加法
- 对应减法
* 对应乘法
/ 对应除法
注意,C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分
如果想得到浮点数的结果,俩个运算数必须至少有一个浮点数
%表示求模,
即俩个整数相除的余数值,注意只能用于整数,不能用于浮点数
负数求模的规则是,结果的正负号由第一个运算数的正负号决定
(即使俩个数均为负号,结果也带负号,因为要遵循上述原则)
赋值操作符:=和复合赋值符
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值
赋值操作符 = 是一个随时可以给变量赋值的操作符
连续赋值
复合赋值符
我们在写代码时,可能经常对一个数进行自增、自减的操作
而c语言则提供了更方便的写法
以上俩图中的变化部分作用相等
而C语言提供的复合赋值符还有
单目操作符:++、--、+、-
前⾯介绍的操作符都是双⽬操作符,有2个操作数的。
C语⾔中还有⼀些操作符只有⼀个操作数,被称为单⽬操作符。
++、--、+(正)、-(负) 就是单⽬操作符的
++和--分别是自增和自减的操作符,而这两个操作符又分为前置和后置
前置
先加减,后使用
后置
先使用,后加减
(注意不管前置或后置都是加减1,且对于加减数值的本身来说,其作用不管前置后置都一样,都是加或减1)
+和-
运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错
运算符 - 是⽤来改变⼀个值的正负号,负数的前⾯加上 - 就会得到正数,正数的前⾯加上 - 会
得到负数
强制类型转换
在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:
1 (类型)
请看代码:
int a=3.14;
//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
为了消除这个警告,我们可以使⽤强制类型转换:
int a = (int)3.14;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
俗话说,强扭的⽠不甜,我们使⽤强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化就能实现代码,这样⾃然更好的
写在文章末尾的话
这篇看似没多长的文章小编真的是花了好大心思肝出来的,要到处找资料来完善,里面可能还有一些错误与不足,欢迎各位读者指出,如果喜欢的话,可以点赞加收藏,这是给小编最大的鼓励了