当前位置:网站首页>C语言知识点精细详解——数据类型和变量【2】——整型变量与常量【1】

C语言知识点精细详解——数据类型和变量【2】——整型变量与常量【1】

2022-04-23 14:12:00 VelvetShiki_Not_VS

数据类型

C语言中,程序使用的每一个数据,必须指明其类型,也必须指明一个函数的返回值类型。数据类型是计算机对程序代码处理数据的一种抽象形式,将计算机中可能出现的各种不同形态的数据进行一 一分类。在C语言中,数据大致可以分为以下4大类:基本类型,指针类型,构造类型和空类型
C语言的基本数据类型

基本类型

C最基础的数据类型,其值无法再分解为其他类型,是C语言库提供的类型,也称为内置类型。常用的基本数据类型如下:

整数类型

整型数据是没有小数部分的值,大体可以分为基本整型,短整型和长整形(此三类为有符号数)以及无符号整型(也包含三种)。按存储空间或数值本身分为整型变量和整型常量。

整型变量

有符号整型

  1. 短整型short(或signed short):占用2字节共16个比特位。
  2. 基本整型int(或signed int):占用4字节共32个比特位。
  3. 长整型long(或signed long):占用4字节共32个比特位。
  4. 64位长整形(__int64或long long):占用8字节共64比特位。
    32位操作系统下各整型变量的大小123123
    由上可见不同操作系统宽度下各整型变量占用大小不变

无符号整型
无符号整型在字节占用与有符号整型相同,但数据的表示范围与有符号数有区别(不能为负)

  1. 无符号短整型unsigned short
  2. 无符号整型unsigned int
  3. 无符号长整型unsigned long
  4. 无符号64位长整形unsigned int_64(或unsigned long long)

一图总结:在这里插入图片描述

整型常量

C语言中那些被分配给变量,并在变量声明前添加了一个关键字const的数据类型就是整型常量,也称为常变量(但其实本质上还是变量)。整型常量一般有以下几种形式:

1.添加const的常变量
2.宏定义# define中定义的符号转换为数值常量。
3.枚举变量定义实际意义的整型常量。

const型常变量

整型常量赋予的整数书写形式一般有十进制,十六进制,八进制和二进制,且不同进制数之间可以进行相互转换。(具体可参考进位计数制转换https://blog.csdn.net/qq_67611811/article/details/124256850?spm=1001.2014.3001.5502)这样的计算方式只是方便人为的计算和对数据的表示,如果想使计算机识别不同进制的数据,需要在每个定义的整型数据常量前加上const关键字同时,在待赋予的整型数值前加上不同进制的标识符:

  1. 整型十进制数:直接写出数字即代表十进制
  2. 整型八进制数:在八进制数前加上0
  3. 整型十六进制数:在十六进制数前加上0x
  4. 整型二进制数:在二进制串前加上0b

代码展示
在这里插入图片描述
说明:

  1. 不管是常量还是变量,都可以通过定义的类型和变量标识符,直接通过各种进制数的标识方式初始化该常量/变量,只是常量被初始化后具有常属性,不能后续被修改:
    在这里插入图片描述

  2. 使用二进制表示时候要注意,通过0b书写的二进制数值的所有位都是数值位,不存在符号位;这点与有符号原反补码有差异。

  3. 不止整型数据类型的变量或常量可以被各进制数赋值初始化,其他数据类型,如字符型,也可以用作特殊的整型被进制数赋值
    在这里插入图片描述

字符char类型可以看做特殊的整型,整数也可以存入其中及正常整数也可以存入其中及正常使用,区别在于char只占1字节,且仅最低7位权可以存储整数,范围在-128~127,如果是unsigned char则8位都可以存储数值,其范围在0~255:

在这里插入图片描述
观察图中值可发现,虽然char可以存储整数值是确定无误的,但是如果存储的值超出了上述所给有无符号char的范围区间,无论是变量还是常量都无法正常存储及输出该值,这里发生了char类型数的范围循环和负边界问题,后续模块会详细说明。

宏定义整型常量# define
  1. 使用# define宏定义语句实现数值对标识符在预编译阶段的直接替换也属于整型数值定义的一种:
    在这里插入图片描述需要注意的是,被宏定义的标识符不能和本文件内的局部或全局变量冲突,否则编译器会警告常量不能被赋值。

  2. 使用# define的常量可以多次重复定义,因为该过程实在预编译阶段完成的,所以不会出现局部或全局变量的重定义问题:
    在这里插入图片描述

注意:宏定义声明一般是定义在一个源文件的开头,作为常量被本文件内的函数当做数值赋给其他变量使用,但不能被其他文件引入使用(不同于静态区的全局变量)。而如果是同一个工程文件想都使用# define定义的常量,可以创建一个头文件将各源文件链接起来,在头文件中宏定义标识符对应的数值,可直接在个文件中使用。这里还需注意,宏定义遵循就近原则,如上图,若头文件中宏定义的标识符在其他文件又被重新宏定义了一次,则后续文件调用常量值时以最新常量值为准(类似于全局变量的性质)。

枚举类型enum定义的整型常量

枚举类型是基本数据类型的一种,它可以免去重复繁琐的同种功能数据常量的宏定义,如下图:
在这里插入图片描述
与其使用上述方式重复冗余的使用宏定义多个常量值,enum的特点是使用一种相同功能数据群体的,更简便易读的整型常量定义方式。枚举类型是处理非数值型数据时可采用的⼀种数值替代⽅法,用于将具体的简单数字替代多个常量集合。

基本格式:
enum 枚举类型名
{
枚举常量1, 枚举常量2,…,枚举常量n,
};

代码示例:
在这里插入图片描述
说明:

  1. enum本身是c语⾔关键字,enum与类型名结合在⼀起统称为枚举类型,是⼀种类型(如上例的weekdays)。在其他函数中调用该枚举类型时需要⼀个枚举变量来代表该枚举类型(如上例定义在枚举后的weekends和定义在主函数中的weekdays两个枚举变量)。
  2. 枚举常量可以在定义该类型时被初始化,未初始化的枚举常量默认由首成员常量赋值0开始,往后依次自增(即0, 1, 2, …, n)。
  3. 若首成员有初始化数值⽽其余成员没有,由该首成员值往后依次自增(首成员为5,则其余成员依次6, 7, 8, ,);若首成员未初始化,⽽其中⼀个成员初始化,则由该初始化成员往后依次自增(若有n个成员,首成员默认0,第三个成员为5,则枚举情况为0, 1, 5, 6, 7, …)。
  4. C语言中,枚举类型被编译器当做整型int或无符号整型unsigned int处理的,其成员为整型常量,所以通常情况下是无法对其成员进行循环遍历的,只有在其整型成员常量为连续(没有中途跳跃的值)时才能从头反问到尾。
  5. 枚举相比于define的优点是增加代码的可读性与维护性,前者更利于对数据的管理和修改,⼀次可以定义多个常量并赋特定值或默认自增状态,且其本身为⼀种类型,更加严谨,可以防⽌命名污染。⽽后者虽然重复定义多个define也可以达到相同目的,但重复冗余且其本身不是任何类型, 为修改整个代码的相同命名⽽⽣,不适用于部分代码的使用。
  6. 枚举类型中每个成员都可以看作是⼀个个整型常量构成的成员列表(因为默认由首成员开始自增0,1,2,3…),所以对enum枚举类型计算⼤小也为4字节。
  7. 枚举类型名可以省略,但此时的枚举变量只能定义在其声明后,且可同时声明多个:
    在这里插入图片描述
    该例声明的enum因为没有类型,所以若不在声明后将变量即使创建好,在后续的函数调用中就无法创建新的该枚举类型的变量了。
  8. 还需要注意,函数中不能对枚举类型的常变量赋值,只能将它们的值赋给其他变量;且函数中其他的其他变量(特别是全局变量)最好不要与它们的标识符重复,会造成就近原则。
    在这里插入图片描述

独家笔记精心整理,代码实战,创作不易。若有疑问请留下评论或私信,如果对你有帮助的话请留下点赞,收藏后再走吧~

版权声明
本文为[VelvetShiki_Not_VS]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_67611811/article/details/124289581