测试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);
上图:小写字符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;
short int
short int 只有int的一半, 也就是216, 范围为(0到65536-1)
long int
long和long int 都是4字节, 要注意:long int的大小和系统是32位还是64位的有关系;
long long int
long long int有8字节, so表示范围为-263到2的63-1;
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
天道酬勤