二、C语言数据类型和变量

目录

1、数据类型介绍

  1.1 字符型

  1.2 整型 

   1.3 浮点型

  1.4 布尔类型 

  1.5 各种数据类型的长度 

2.signed和unsigned

3.变量 

  3.1 变量的创建 

  3.2 变量的分类  

  3.3 拓展知识 

4.算术操作符 

  4.1 + 

  4.2 - 

  4.3 * 

  4.4 / 

  4.5 % 

5. 赋值操作符

  5.1 复合赋值运算符 

6.单目操作符 

  6.1 ++和--

  6.2 +和- 

7.强制类型转换 


1、数据类型介绍

 在日常生活中,会用到各种各样类型的数字,例如一个人的年龄,需要用整数来表示,购物APP上面的商品价格,需要用小数来表示。编程是用来解决实际问题的,所以C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,字符类型描述字符,浮点类型来描述小数。编译器只有知道了数据的类型,才知道怎么操作数据。

C语言的数据类型分为两种,一是内置类型,二是自定义类型。如图所示

 自定义类型后续详细介绍,这里仅介绍内置类型,内置类型是C语言本身所具有的,分别为字符型、整型、浮点型、布尔类型。

  1.1 字符型

字符型用来表示不同的字符 ,字符型通常以单引号包围的单个字符来表示,例如'a'。单引号中必须是单个字符,若为'abc',则是错误的

  1.2 整型 

整型可以包括正整数、负整数、零。 整型又可以分为长整型、短整型、长长整型(C99中引入) 

其中, 长整型、短整型、长长整型的int可省略,所以代码可改为

   1.3 浮点型

浮点型可以用来表示小数,又可分为单精度浮点型(float)和双精度浮点型(double) ,主要区别在于它们的存储空间、精度、表示范围和运算速度。

  1.4 布尔类型 

C语言原来没有为布尔值单独设置一个类型,而是使用整数0表示假,非0值表示真。在C99中引入了布尔类型,专门用来表示真假的。使用布尔类型要引用头文件 stdbool.h

  1.5 各种数据类型的长度 

每一种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,变量长度的不同,存储的数据范围就有所差异。

在介绍数据类型的长度之前,先要普及一个知识 ,计算机的所有指令和数据都保存在内存里,内存中的存储单元是一个线性地址表,是按字节(Byte)进行编址的,每个字节的存储单元都对应着一个唯一的地址空间。在计算机中,通常用字节数来衡量数据类型所占内存空间的大小

计算机能够识别的是二进制代码语言(0或1)。在计算机中,最小的单位是bit(比特位),一个二进制位的存储需要一个比特位的空间,一个字节(Byte) = 8个比特位

 计算机的存储单位从小到大依次为bit、Byte、KB、MB、GB、TB、PB......,具体单位换算如下图

其中,1024也等于2的10次方 

所以,各种数据类型的长度也不同,要知道数据类型在内存中所占空间的大小,就需要用到一个操作符:sizeof()。sizeof是一个关键字,也是操作符,专门是用来计算类型长度的,单位是字节。 

如图可以得出各种类型所占的内存空间为多大。 其中最有疑惑的地方是int和long为什么所占的内存空间是相同的。其实C语言标准规定:sizeof(long) >= sizeof(int)。

注:sizeof的括号中,可以是数据类型,也可以是表达式,例如:

但是要注意,若sizeof()中放的是表达式,则表达式不会真实的运算,如下图,sizeof()中存放了一个表达式,但是变量s的值并没有因此改变,这里的sizeof计算的仅仅是s的数据类型所占的内存空间大小

 

看到这里或许会有个疑问,为什么sizeof计算的结果要用%zd来打印呢。sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型 。不同的系统中,返回值的类型可能是unsigned int,也可能是unsigned long,甚至是unsigned long long,对应的占位符分别是%u,%lu,%llu,这样不利于程序的可移植性。C语言提供了一种解决办法,创造一个类型别名size_t,用来统一 表示sizeof的返回值类型。size_t 对应的占位符为%zd。

2.signed和unsigned

C语言使用signed和unsigned关键字修饰字符型整型类型的,signed表示一个类型带有正负号,包含负值。unsigned表示该类型不带有正负号,只能表示零和正整数。

对于int类型,默认是带有正负号的,也就是说 int <==> signed int。若要让int表示非负整数,只需要使用unsigned声明变量,如图所示。

对于有符号的整数打印应该使用%d,对于无符号整数的对于应该使用%u 

看到这可能就会问了,这两种类型有什么优势吗。声明为unsigned的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。因为无符号整数补码的最高位不是符号位,而是数值位 (后续会深入介绍)。

3.变量 

学习完了数据类型,那么我们要使用数据类型做什么呢?类型是用来创建变量的,那什么是变量呢,C语言中把经常变化的值称为变量,不变的值称为常量。 

  3.1 变量的创建 

在C程序中,变量在使用之前必须先定义,定义变量的一般形式为: 数据类型  变量名; 

编译器按变量定义的类型分配相应大小的内存空间。如果在创建变量的时候就给一个初始值,这就叫作初始化。

注:如果创建变量之后,没有进行初始化,也没有进行赋值,那么这个变量就是个随机值。要养成在定义变量的同时为其初始化的好习惯。

  3.2 变量的分类  

①全局变量:在大括号外部定义的变量就是全局变量。

②局部变量:在大括号内部定义的变量就是局部变量。 局部变量的使用范围比较局限,只能在自己所在的局部范围内使用

若局部变量出了自己的局部范围,则无法使用,如下图所示,sum定义在大括号内,出了大括号则无法使用。

注:若出现局部变量名和全局变量名相同的情况,会如何呢

从这段代码中看到,一个全局变量num和一个局部变量num,最终打印出的值是局部变量的值,所以,在C语言中,当局部变量和全局变量名称相同时,局部变量优先使用,但是不推荐这样命名,容易造成混乱。 

  3.3 拓展知识 

全局变量和局部变量在内存中存储在哪里呢?

一般在学习C/C++的时候,我们会重点关注内存中的三个区域:栈区、堆区、静态区。局部变量放在内存的栈区,全局变量放在内存的静态区,堆区是用来动态内存管理的(后续介绍)

内存区域的划分可参考操作系统相关知识。 

4.算术操作符 

C语言中为了方便运算,提供了一系列操作符,操作符也叫运算符。其中有一组操作符叫算术操作符,分别是: +  -  *  /  % 

  4.1 + 

这是用来完成加法运算的, 例如: 3+5,位于操作符两端的就是它们的操作数,所以这种操作符也叫双目操作符

  4.2 - 

这是用来完成减法运算的 

  4.3 * 

这是用来完成乘法运算的 

  4.4 / 

这是用来完成除法运算的,注意,编程语言中的除号和数学中的➗是不一样的。 

如果除号两端是整数,执行的是整数除法,得到的结果也是整数

注:根据数学的思维,6/4得到的结果应该是1.5,但是在计算机中也是这样吗,看以下代码,6/4的结果却是1,这是因为C语言里面的整数除法是整除,只会返回整数部分,丢弃小数部分。

如果想要得到浮点数的结果,则两个运算数必须至少有一个浮点数,这时C语言就会进行浮点数除法。,如下图。

  4.5 % 

运算符%表示求模运算,就是返回两个整数相除的余数,这个运算符只能用于整数,不能用于浮点数。如下图所示,6除以4等于1,余2。

注:如果是负数求模,则得出结果的正负号由第一个运算数的正负号决定 

5. 赋值操作符

赋值操作符(=)其实在前面已经用到很多次了,它是一个随时可以给变量赋值的操作符

  5.1 复合赋值运算符 

在写代码时,我们可能经常对一个数进行自增、自减操作,复合赋值运算符就给我们一种更加方便的写法。赋值运算符有:+=    -=    *=    /=    %=,下面介绍+=,其余同理。

6.单目操作符 

前面介绍的都是双目操作符,都有两个操作数,而单目操作符就只有一个操作数。

++      --       +(正)   -(负) 就是单目操作符,注意区别这里的+ - 是正负号,和双目运算符中的加法减法是不同的。

  6.1 ++和--

++是一种自增运算符,又分为前置++和后置++,--是一种自减运算符,也分为前置--和后置--,以下仅介绍++,--同理。

先来看前置++,意思就是先+1,再使用。如下图代码

来分析一下这段代码中的++a,就是先让a的值+1,然后再赋值给b,所以最后得出的结果a和b都等于6. 

再看看后置++,意思就是先使用,再+1,如下图代码。 

这段代码中的a++,就是先使用a的值,将a赋值给b,再让a+1,所以b获取的值还是5,a则变成了6。 

  6.2 +和- 

运算符 + 对正负值没有影响,是一个完全可以忽略的运算符,但是写了也不会报错。 

运算符 - 用来改变一个值的正负号

7.强制类型转换 

在操作符中还有一种特殊的操作符是强制类型转换,语法形式很简单,就是一个(),如下图代码 

这段代码将浮点数3.14强制转换为int类型,这种强制类型转换只取整数部分。 

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值