数据压缩 任务一
一 数据类型
二 数据类型表示形式和计算方法
整型int
1.整型数说明
加上不同的修饰符, 整型数有以下几种类型;
signed short int 有符号短整型数说明。简写为short或int
signed long int 有符号长整型数说明。简写为long
unsigned short int 无符号短整型数说明。简写为unsigned int
unsigned long int 无符号长整型数说明。简写为unsigned long
2.整型变量定义略
3.整型常数
十进制以非0开始,8进制以0开始,10进制以0X开始
浮点型(float)
1.浮点数说明
浮点数均为有符号浮点数, 没有无符号浮点数。
2.浮点型变量定义
3.浮点常数表示
一浮点常数只有一种进制(十进制)。所有浮点常数都被默认为double。绝对值小于1的浮点数,小数点前面的零可省略。
字符型(char)
无值型(void)
基本运算:算术运算 逻辑运算 关系运算 按位运算 地址运算
三 类型转换
1.自由类型转换
发生在不同数据类型的量混合运算时,由编译系统自动完成。若参与运算的量的类型不同,则先转换成同一类型,然后进行运算。
注意:
1.转换由低到高。 精度排行short int<int<long int<long long
int<float<double<long double
2.所有的浮点运算都是以双精度进行的,即使仅含float。单精度量运算的表达式也要先转换成double型再做运算。
3.char型和stort型参与运算需要先转换成int型
4.在赋值运算中赋值号两边的量数据类型不同时,等号右边量的类型将转换为左边量的类型。
5. 不能对boolean类型进行类型转换。
6.不能把对象类型转换成不相关类的对象。
6. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
7. 转换过程中可能导致溢出或损失精度
2. 强制类型转换
可以利用强制类型转换运算符,将一个运算式转换成所需类型。对于从高到低的强制转换,实质上就是一个截断的操作。只把低端需要的部分保留,其余的部分直接扔掉。
c++中类型转换大致有4种:
- dynamic_cast类型转换
(1) dynamic_cast是在运行时检查的,属于动态转换;
(2) 一般用于基类和派生类之间的相互转换。
- static_cast类型转换
(1) static_cast会在编译的过程中进行安全性检查,
相对与dynamic_cast是静态转换;
(2) 一般用于内置数据类型的转换和通常的类之间的转换。
- const_cast类型转换
主要是用于去掉指针和引用的const和volatile类型。
- reinterpret_cast类型转换
(1) reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)
(2) 用于完全没有关系指针或引用之间的转换,比如浮点型指针转整型指针;
(3) 相当于强制转换,不会考虑安全检查问题,这是需要值得注意的,不像dynamic_cast与static_cast进行安全检查。
四 数值溢出
1 无符号 unsigned型
若数据溢出,即超出有效值范围(2N-1),则最终得到的结果是对2N-1取余。
2有符号 signed型
C语言的定义是Undefined Overflow,也就是溢出的数正常显示,并不进行求余的运算。
五 移位
移位运算分为左移(<<)与右移(>>),其中右移又分为逻辑右移与算术右移。三者实现如下:
(1)左移:移出去的位丢弃,空缺位(vacant bit)用 0 填充;
(2)逻辑右移:移出去的位丢弃,空缺位(vacant bit)用 0 填充;
(3)算术右位:移出去的位丢弃,空缺位(vacant bit)用符号位来填充。