基本数据类型大小

C++定义了算术数据类型和空数据类型(void)

算术数据类型又分为两大类,整型(包括字符型和布尔型)和浮点型。不同数据类型占据的比特数不同机器有所差别,比如int型数据在一些老型机器上就是2字节,8比特,我的机器上面int型就是4字节,16比特。

#include<stdio.h>

int main(){
    printf("Data length of int、short、long:\n");
    printf("int :%d\nshort:%d\nlong:%d\n",sizeof(int),sizeof(short),sizeof(long));
    return 0;
}

上面过程使用的是Vscode1.47.0编辑器,编译器使用g++编译器,使用过程一开始出现了乱码现象,我点击切换成了右下角GBK国标编码

然后选择Save with Encoding,找到GBK或者UTF-8也行

正常使用的是char字符集,使用char就可以覆盖所有的基本字符集(换句话说,一个char大小和一个机器字节一样),若要使用扩展字符集 ,需要使用w_char字符类型存储,w_char使用16bit存储。char16_t,char32_t也和w_char一样,用于拓展字符集,稍有不同的是,char_16和char_32用于为Unicode字符集服务(ASCII是Unicode的子集。ASCII一般包括数字和英文,长度8bit,Unicode包括中文等其他语言,长度通常16bit)

算数类型中的数据类型长度通常有以下结论
其中short一定是2字节,long long一定是8字节,int,long不同机器规定的字节数不同,但一定满足上面结论介于2-8字节

字节的机器实现

我们通常会使用一个叫做地址的数字将每一个字节定位起来。给定起始地址,但是比特串大小不同,注意说法:地址为100001的字 还是 地址为100001的字节,数据类型决定了数据所占比特数以及如何解释这些比特数

二进制小数的讨论

浮点数的设立目的就是为了更精确的科学计算,可以表示特别特别小的数,或者特别特别大的数,还有分数,小数这些整数不能表示的数。另外,就数值本来的大小(无论二进制还是十进制),可以通过移动浮点(小数点),将数值扩大倍或者缩小 ,比如写成十进制就是,要是小数点右移1位,则原数扩大2倍,,发现刚好变成移动之前数值的2倍,向左移动也是同理。注意到 收敛于1。
有些数据不能精确表示,比如无法用有限的比特位数精确表示,统一来看,二进制有许多小数都不能表示,只能表示 能够表示成为的数,所以不能被精确表示的小数只能被近似表示。无限小数自然不能精确表示,我们发现都不能被精确表示,因为0.5,0.25,0.125 ,0.0625,0.03125......竟然找不到能够完美匹配0,2的二进制组合,因此这个看似平淡无奇的数都需要近似表示。从这里也能够看出,其实能够精确表示的小数只占小部分,大多数小数用浮点数表示都需要近似表示

浮点数表示

上面关于浮点数的表示采用的方法叫做定点表示法,定点表示法其实比特数据解释思路继承自整型数据,采用这种思路不能表示足够大的数据,比如科学计算中需要表示一个,按照定点表示101后面需要跟100个0,这就需要太多的空间,接下来我们介绍浮点表示。

浮点数是专门表示这种浮点小数。一个标准的浮点数一般包括三部分,符号位,尾数位,阶码位