数据压缩 任务一

一 数据类型

数据压缩 任务一

二 数据类型表示形式和计算方法

数据压缩 任务一

整型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种:

  1. dynamic_cast类型转换

(1) dynamic_cast是在运行时检查的,属于动态转换;

(2) 一般用于基类和派生类之间的相互转换。

  1. static_cast类型转换

(1) static_cast会在编译的过程中进行安全性检查,
相对与dynamic_cast是静态转换;

(2) 一般用于内置数据类型的转换和通常的类之间的转换。

  1. const_cast类型转换

主要是用于去掉指针和引用的const和volatile类型。

  1. 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)用符号位来填充。