基本类型char,int,float,double在内存中占用的大小测试

时间:2023-01-13 15:56:18

  测试char, short char, long char, int ,float, double在内存中的大小, 测试的系统为64位win7, 因为在32位系统和64位系统中各种类型编译以后, 从内存获取的大小是不同的, 所以此文仅供参考:

  char

  char为1个字节, 所以char的unsigned范围是0到255(0->28-1);

  char如果是signed的话,就是去掉符号位值为-128到127(-28->27-1);

    

基本类型char,int,float,double在内存中占用的大小测试

  上图:小写字符s的ascll码为115, 转化为16进制就是73;

  char str = 's'和 signed char str='s'的表示范围都是 -27 到 27, unsigned char的表示范围是0到28,虽然表示的范围不同,但是在内存和栈中占用的内存大小是固定的;

  int 

  在32位系统中(现在基本上int都是32位),signed的范围(-216到215-1), 精确的范围表示为:-2147483648~+2147483647

  unsigned类型 的int 范围:0~4294967295 即( 0到232-1)

  因为十进制的16在16进制中为10, 所以内存中显示的是10;

    

基本类型char,int,float,double在内存中占用的大小测试

  short int

  short int 只有int的一半, 也就是216, 范围为(0到65536-1)

    

基本类型char,int,float,double在内存中占用的大小测试

  long int

  long和long int 都是4字节, 要注意:long int的大小和系统是32位还是64位的有关系;

    

基本类型char,int,float,double在内存中占用的大小测试

  long long int

  long long int有8字节, so表示范围为-263到2的63-1;

    

基本类型char,int,float,double在内存中占用的大小测试

  float

  float占用的内存为4个字节, 和int占用的空间是一样的, 只是保存的方式不同, float采用的是指数的方式保存数字, 精确度会有问题;

  double

  double占用的8个字节的内存, 所以表示范围会比float更大, double保存数值的方式也是为指数保存, 所以也有精确度的问题;

   signed和unsigned的区别

  有signed前缀的话, 就是包含负数和正数, 在绝对值的空间内, 数据集变少;

  有unsigned前缀的话, 只有正数, 能够表示的整数范围变大;

  32位的计算机和64位的计算机有什么区别

  1.64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存

  2.64位CPU一次可提取64位数据,32位的CPU一次只能提取32位数据, 所以64位比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。

   其他:


作者: ​​NONO

天道酬勤