数据类型的定义
c语言的数据分类
首先是针对C语言的数据类型做个整理 大致分为四个大类型
- 基本类型
- 枚举类型
- 空类型
- 派生类型
那么根据以上四个大类型 我们来一一的做一个分站式讲解
基本类型
基本类型其中大致分为两类 整型 和 浮点型
整型
(我在基本类型后面都附上了字节长度,这里是指在64位编译器下的长度 32位和16位暂时不附)
整型包含:
基本整型 int (4字节)
短整型 short [int] (2字节)
长整型 long [int] (8个字节)
双长整型 long long [int] (8个字节)
字符型 char (1个字节)
布尔型 bool (1个字节或4个字节)
这里布尔型要拿出小笔画画重点 :
布尔型有两个值,而且只有两个值 就是true或者false。
boolean 1字节或者4个字节
如果使用boolean声明一个基本类型的变量时,那么该变量占4个字节,
如果使用boolean声明一个数组类型的时候,那么每个数组的元素占一个字节。
注:整型数据可在类型符号前面加修饰符:signed(有符号整数类型)和unsigned(无符号整数类型),若不指定则默认为"有符号类型"。
浮点型
浮点型分为两种单精度浮点型和双精度浮点型
- 单精度浮点型【 float(4个字节)】
- 双精度浮点型【double (8个字节)】
对于查看字节 我们可以用个代码来让它得到展示:
首先固定的格式:
cpp
#include <id> ----->头文件
#include <notify> ---->头文件
using namespace std; //释放std命名空间中的变量名,函数名以及类型名,其中std是C++标准库的命名空间。
int main ()
{
return 0;
}
cpp
#include <cstdio>
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
short x = 5;
int a = 10;
long b = 20;
float c = 1.1;
double d = 2.2;
cout << "short占用的字节" << sizeof(x) << endl;
cout << "int占用的字节" << sizeof(a) << endl;
cout << "long占用的字节" << sizeof(b) << endl;
cout << "flaot占用的字节" << sizeof(c) << endl;
cout << "double占用的字节" << sizeof(d) << endl;
return 0;
}
得到展示的值是
float和double的精度和范围
范围
float和double的范围是由指数的位数来决定。
float的指数位有8位,而double的指数位有11位,分布如下:
float :
1bit(符号位) 8bits(指数位) 23bits(尾数位)
double :
1bit(符号位) 11bits(指数位) 52bits(尾数位)
所以
float的指数范围为-127~+128
double的指数范围为-1023~+1024
并且指数的范围是按照补码 的形式来划分(什么是补码会在后期的文章当中关注持续每天更新)
而且其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的"1",由于它是不变的,所以不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。(能绝对保证15位没有问题)
枚举类型
枚举类型就只有枚举类型(enum)
有一个定义格式 :
cpp
enum 枚举名{元素1,元素2};
那么没为什么要用枚举?
cpp
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
就例如上面的代码块看起来很复杂,但是利用枚举的方式就是:
cpp
enum DAY{MON=1,TUE,WED, THU, FRI, SAT, SUN};
是不是简单的多?
但是这里要注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。
空类型
空类型 即是 void类型 :常用在程序编写中对定义函数 的参数类型、返回值、函数中指针类型 进行声明,(函数和指针也会在后期慢慢的给大家详细讲讲)可以表示一种未知类型,但是不能代表一个真实的变量。
下面代码都企图让void代表一个真实的变量,因此都是错误的代码:
cpp
void a; //错误
void function(void a); //错误
void function(void); //正确
void* :则为"无类型指针",可以指向任何类型的数据。(无类型指针我后面会说)
派生类型
在说派生类型前我们需要了解什么是面向对象 (划重点后面要考)
面向对象的主要特征:继承、封装和多态。
继承(派生):使一个类从现有的一个类中派生,而不用重新定义新类。
实质是用已有的数据类型创建新的数据类型,并保留已有的数据类型的特点。以旧类为基础创建新类,新类包含旧类的的数据成员和成员函数,并可以在新类中添加新的数据成员和成员函数。旧类被称为父类或基类,新类被称为派生类或子类。
以上代码块只是举例说明!
派生的一般表达形式
cpp
class 派生类名称标识符 : [继承方式] 基类名称标识符
// [继承方式],继承的基类成员的方式:public、protected、private;:是继承关系运算符。
{
[访问控制修饰符:] //派生类的访问控制类型:public、protected、private
[成员声明列表] //派生类新增成员列表,继承来的成员不用重新列举
};
继承方式有3种,其决定3种派生类型:
分别为
public (公有型派生)
protected(私有型派生)
private(保护型派生)
访问控制修饰符也是此3种类型。(后期会针对3种派生类型做详细分析)
注
在代码命名的时候注意保留关键字 那么哪些是保留关键字呢 我们来看个表
不可出现于表中相同的命名!
今天的内容就到这里 明天会给大家开始说说数据于运算,每天更新,每天进步 。
"出发吧!伟大的程序员啊"