数据在内存中的存储方式

32位系统中char,int型数据在内存中的存储方式

  • 计算机中存储整型类数据采用的是补码。
  • 正数的补码与原码相同,负数的补码=反码+1 。
  • 反码:符号位不动,数值位按位取反。
  • 符号位:1表示负数,0表示正数
  • char也是一种整型类型,占1byte(8bit)它存储的是字符的ascii值,有符号字符类型[signed] char的数据表示范围为 -128(1000 0000) ~ 127,无符号字符类型unsigned char 的数据表示范围为 0 ~ 255。
    char
  • int 型占4byte(32bit),有符号[signed] int 数据范围为 -32768 ~32767,无符号unsigned int 数据范围为 0 ~ 65535
    int

浮点数在内存中的存储方式

  • float型实数在内存中占4个字节(32 bit),从低位到高位依次叫第0位到第31位。这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
    1、符号位:0表示正数,1表示负数。
    2、阶码:表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和, 规格化的二进制实数的指数只能在-127~ +127之间,所以,一个float型数的最大值在+2127即+3.4*1038,最小值在-2127即-3.4*1038。
    3、尾数:表示该实数转化为规格化的二进制实数后小数点以后的其余各位。
    float
  • double型与float型存储方式相同,只是所占的位数不同


    double

例如,将十进制178.125表示成机器内的32个字节的二进制形式.

  1. 将128.125表示成二进制数:(178.125)(十进制数)=(10110010.001)(二进制形式);
  2. 将二进制形式的浮点实数转化为规格化的形式:(小数点向左移动7个二进制位可以得到) 10110010.001=1.0110010001*2^7
  3. 符号位:该数为正数,故第31位为0,占一个二进制位.
    阶码:指数为7,故其阶码为127+7=134=(10000110)(二进制),占从第30到第23共8个二进制位.
    尾数: 为小数点后的部分, 即0110010001.因为尾数共23个二进制位,在后面补13个0,即01100100010000000000000
  4. 178.125在内存中的实际表示方式为:
    0 10000110 01100100010000000000000

将-0.15625表示成机器内的32个字节的形式.

  1. 将-0.15625表示成二进制形式: (-0.15625)(十进制数)=(-0.00101)(二进制形式);
  2. 将二进制形式的浮点数转化为规格化的形式:(小数点向右移动3个二进制位可以得到) -0.00101=-1.01*2^(-3)
  3. 符号位:该数为负数,故第31位为1,占一个二进制位;
    阶码:指数为-3,故其阶码为127+(-3)=124=01111100,占从第30到第23共8个二进制位;
    尾数: 小数点后的01,当然后面要补21个0;
  4. 0.15625在内存中的实际表示形式为:
    1 01111100 01000000000000000000000

你可能感兴趣的:(数据在内存中的存储方式)