数据类型
基础
一、二进制及其运算
在计算机中,数据以二进制的形式表示。
〖(XXX)〗_b ,如〖(1011.11)〗_b。 其权值为2^i,基数为2,系数为0与1。
二进制按权展开相加得十进制数值,十进制整数部分除2取余,小数部分乘2取整得二进制数值。如:
二进制数分为有符号数和无符号数。其中,有符号数的最左位表示符号,0+,1-。
有符号数表示方法分为原码,反码和补码。正数三码相同,负数反码除符号位取反,补码在反码基础上+1。
计算方法:二进制数运算时以补码进行加运算,结果仍为补码。
二、位与字节
位(bit):二进制数中的某位数,只能为0或1。
字节(byte):8位二进制数位一个字节。
编程中的数据类型
三、C++中的数据类型表示
①整型(int)
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
②浮点型
float //4 个字节 占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double //8 个字节 占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double //16 个字节 占16 个字节(128位)内存空间,可提供18-19位有效数字。
③字符型(其本质上仍为整型)
char //1 个字节 -128 到 127 或者 0 到 255
unsigned char //1 个字节 0 到 255
signed char //1 个字节 -128 到 127
四、C++中数值的计算
常用运算符:
- 把两个操作数相加 结果不能超过类型大小上限,否则溢出,为不准确结果。
- 从第一个操作数中减去第二个操作数
- 把两个操作数相乘
/ 分子除以分母
% 取模运算符,整除后的余数
++ 自增运算符,整数值增加 1
– 自减运算符,整数值减少 1
类型转换:
自动数据类型转换:发生在赋值、表达式计算、函数传参时。
手动类型转换:var = (typename) value
通常数值范围小的类型转换为数值范围大的数据类型不会丢失数据,但较大double类型转换为float可能丢失精度,double/float转换为int丢失小数(没有溢出时)。
整型数据类型大小排序(从小到大): bool, char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long
浮点数排序大小:float, double, long double
数据溢出:
假设在一个使用了 2 个字节内存的 short int 类型变量中存储了0111111111111111 B,其十进制为32767,如果+1,则该数据变为1000000000000000 B,其十进制为-32768,并不为+32768。s实际情况下数据溢出远比本例复杂,但可以确定的是溢出后数据会发生错误。
位移操作:
<< //二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 60 << 2 将得到 240,即为 1111 0000
>> //二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 60 >> 2 将得到 15,即为 0000 1111