任务:总结归纳计算机编程中的各种数据类型其表示形式和计算方法。重点关注类型转换,数值溢出和移位等操作。
一、基本的内置类型
类型 | 关键字 |
---|---|
布尔型 | bool |
整型 | int |
字符型 | char |
浮点型 | float |
双浮点型 | double |
无类型 | void |
C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。
下面列出了数据类型修饰符:
- signed
- unsigned
- long
- short
修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。
1.整型
类型 | 字节数 | 范围 | 存储方式 |
int | 4 | -2147483648 ~ 2147483647 | 定点有符号二进制补码形式 |
unsigned int | 4 | 0 ~ 4294967295 | 定点有符号二进制补码形式 |
signed int | 4 | -2147483648 ~ 2147483647 | 定点有符号二进制补码形式 |
short int | 2 | -32768 ~ 32767 | 定点有符号二进制补码形式 |
unsigned short int | 2 | 0 ~ 65,535 | 定点有符号二进制补码形式 |
signed short int | 2 | -32768 ~ 32767 | 定点有符号二进制补码形式 |
long int | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 定点有符号二进制补码形式 |
signed long int | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 定点有符号二进制补码形式 |
unsigned long int | 8 | 0 ~ 18,446,744,073,709,551,615 | 定点有符号二进制补码形式 |
2.字符型
类型 | 字节数 | 范围 | 存储方式 |
char | 1 | -128 ~ 127 或 0 ~ 255 | 有符号二进制补码形式 |
unsigned char | 1 | 0 ~ 255 | 有符号二进制补码形式 |
signed char | 1 | -128 ~ 127 | 有符号二进制补码形式 |
3.浮点型
类型 | 字节数 | 范围 | 存储方式 |
float | 4 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) | 浮点形式存储 |
double | 8 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) | 浮点形式存储 |
long double | 16 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 | 浮点形式存储 |
精度排行(由低到高)
short int<=int<=long int<=long long int
float<=double<=long double
二、数值计算
1.类型转换
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。
低———————————————————>高
byte, short, char—> int —> long—> float —> double
数据类型转换满足如下规则:
- 不能对boolean类型进行类型转换。
- 赋值、表达式计算、函数传参时发生自动数据类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把容量大的类型转换为容量小的类型时必须使用强制类型转换:var = (typename) value
- 转换过程中可能导致溢出或损失精度。
2.数据溢出
数据溢出指变量的值超出了其数据类型能表示的最大数值范围。当变量的数据类型所提供的位数无法适应某个值时,就会发生溢出(上溢)或下溢。
上溢:
假设short int类型变量中存储了32767的二进制表示
0111 1111 1111 1111 + 1 = 1000 0000 0000 0000
32767 + 1 = -32768
同样地,当一个整数变量保存的数值在其数据类型负值范围的最远端(即最小负值),那么当它被减去 1 时,其高位中的 1 将变为 0,结果数将被解释为正数。这是溢出的另一个例子。
下溢:
浮点值还会遇到下溢的情况。当一个值太接近于零时,就可能会发生这种问题,过小的数字需要更多数位的精度来表示它,因而无法存储在保存它的变量中。
3.移位操作
变量A = 0011 1100
- << 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。A << 2 将得到 240,即为 11110000。
- 。>>二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 A >> 2 将得到 15,即为 0000 1111