Day2
C++有一组基本的原始数据类型,它们对应于计算机的基本存储单元和使用这些单元去保存数据的一些常见方式,这些原始数据类型基本上构成了我们在程序中存储的任何类型数据的基础.
在计算机中最小的信息单位是bit,即一个二进制位. 8个bit组成一个Byte,也就是字节。一个存储单元可以存储一个字节,也就是8个二进制位。
1Byte | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
组成元素 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 |
而计算机中的内存就是由这样字节为最小单位的存储空间组成,为了方便寻址,给每个字节起了一个编号,这个编号就被称为地址.
地址 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|---|
0x00AFF818 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
0x00AFF819 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0x00AFF81A | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0x00AFF81B | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0x00AFF81C | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
0x00AFF81D | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
0x00AFF81E | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
0x00AFF81F | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
0x00AFF820 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
如上图就是计算机中的一段内存示意图,内存0x00AFF818-0x00AFF81B共4个字节中存储的一个变量,其值为0x00000013,也就是一个int整形,十进制数值为19,(高低地址位存储的顺序依计算机CPU等因素决定)
C++定义了一套包括算数类型(arithmetic type)和空类型(void)在内的基本数据类型.其中算数类型包含了字符,整形数,布尔值和浮点数.空类型不对应具体的值,仅用于一些特殊场合
类型 | 含义 | 最小尺寸 |
---|---|---|
bool | 布尔类型 | 占用1个字节中的1位 |
char | 字符 | 1个字节-8位 |
wchar_t | 宽字符 | 2个字节-16位 |
char16_t | Unicode字符 | 2个字节-16位 |
char32_t | Unicode字符 | 4个字节-16位 |
short | 短整型 | 2个字节-16位 |
int | 整型 | 2个字节-16位 |
long | 长整型 | 4字节-32位 |
long long | 长整型 | 8字节-64位 |
float | 单精度浮点数 | 6位有效数字 |
double | 双精度浮点数 | 10位有效数字 |
long double | 扩展精度浮点数 | 10位有效数字 |
- 布尔类型(bool)的取值只有真(true)或者假(false).布尔量用于表示逻辑运算的结果.例如
void f(int a,int b)
{
bool bl=(a==b);
}
如果a等于b,bl将变成true,否则为false
在算数和逻辑表达式里,bool都将被转为int,转换之后得到的值再进行各种算数和逻辑运算,如果结果又转回bool,那么0将转为false,所有非零值都转为true.
void f()
{
bool a=true;
bool b=true;
bool x=a+b; //a+b=2,所以x为true
bool y=a|b; //y也为true
}
指针也可以隐式地转换到bool,非零指针转为true,具有零值的指针转为false
- 字符类型