目录
sizeof函数
此函数可以输出数据类型所占字节数 cout<<sizeof(int)
注意: 由于它们的内存大小是和系统相关的,所以在不同的系统下取值可能不同。
一、基本数据类型
1.整型
①即整数类型
②分类
按符号分可分为有符号和无符号
按长度分可分为普通整型、短整型、长整型
③整型类别
类型 | 名称 | 字节数 | 范围 |
int | 有符号整型 | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 无符号整型 | 4 个字节 | 0 到 4294967295 |
short int | 有符号短整型 | 2 个字节 | -32768 到 32767 |
unsigned short int | 无符号短整型 | 2 个字节 | 0 到 65,535 |
long int | 有符号长整型 | 4 个字节 | -2147483648 到 2147483647 |
unsigned long int | 无符号长整型 | 4 个字节 | 0 到 4294967295 |
④如何算长度?
比如int 4个字节*8bit = 32bit
也即是在内存中占32位
带符号位置 在二进制中,0有两种表方法。
+0的原码为0000 0000 0000 0000 0000 0000 0000 0000,
-0的原码为1000 0000 0000 0000 0000 0000 0000 0000,
因为0只需要一个,所以把-0拿来当做一个最小的数-2147483648。 2147483647的原码 为0111 1111 1111 1111 1111 1111 1111 1111
2的31次方-1
2.单浮点型
①单精度:使用关键字float,在内存中占用4个字节
②声明一个单精度浮点数
float x = 2.59f
关键字float,后面要添加f
注意:一定要在后面添加f否则默认是双精度
③算出对应的十进制数(32bit)
01000001001000100000000000000000
第一步:符号位为0,表示是正数;
第二步:指数位为10000010,换算成十进制为130,所以指数为130-127=3;
第三步:尾数位为01000100000000000000000,换算成十进制为 (1+1/4+1/64); #尾数部分都要+1 ;
十进制数值为:2^3*(1+1/4+1/64)=8+2+1/8=10.125
3.双浮点型
①双精度:使用关键字double,内存中占8个字节
②声明一个双浮点数:double d = 5.32
③探讨双精度的存储方式(64bit)
1bit 符号位(Sign) : 0代表正,1代表为负;
11bit 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储;
52bit 尾数部分(Mantissa):尾数部分。
4.字符型
①字符类型
采用关键字char,字符数据使用单引号包围 占用一个字节 取值范围-128~127。
②定义一个字符
char ch1 = ‘a’; char ch2 = ‘b’;
③注意
字符数据在内存中存储的是字符的ASCII码,即一个无符号整数 所以可以直接把整数赋值 给字符变量 比如: char c1 = 'a'; char c2 = 97; 两个的效果一模一样
sizeof(char) //1
④屏幕输入字符类型
char ch; cin >> ch; cout<<ch;
5.宽字符型
①宽字符型
关键字wchar_t,占用2个字节一种扩展的存储方式。
wchar_t类型主要用在国际化程序的实现中
②字符与宽字符的区别
char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。
wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位,总之,wchar_t所能表示的字符数远超char型。
③使用:wchar_t s = 'w';
6.布尔型
①bool类型
bool类型用来表示真假,也即是0、1。它一般占用 1 个字节长度。
bool 类型只有两个取值,true 和 false:true 表示“真”,false 表示“假”。
在程序中bool被作为整数对待 其中false为0 ,true为1
0 转换成 false 所有其他的值都被转换成 true,只要所赋值不为0都会得到1
我们可以直接给bool类型赋值为整数是合法的,反之将整型赋值给bool也是合法的
②bool落地场景
Bool经常被用作条件判断,如果条件为真,则。。。 如果条件为假,则。。。
此函数可以输出数据类型所占字节数 cout<<sizeof(bool) //1
二、派生数据类型
1.指针类型
通常所说的指针就是指针变量,它是一个专门存储地址的变量,
变量的指针主要指变量在内存中的地址。
Int a = 10;
Int *p;
*p = &a;
2.枚举类型
枚举就是取有限个值,确定列举出来的几个值,比如周一到周六
enum Week{Monday,Tuesday,…..Sunday}
3.数组类型
将同一类型的数据按照一定的形式有序的组织起来,这些有序数据的集合就称之为数组
4.结构体类型
由各种数据类型组合起来的数据集合
struct man{
int age;
char name[20];
short sex; }
5.共同体类型
将不同数据项组成一个整体 和结构体有点类似,但是在内存中占用首地址相同的一段存储单元
union myClass{
int a;
char b;
float c; }
注意:每个瞬间只能存储一种数据类型
6.类类型
万物皆是类,皆是对象