叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

一、写在前面的话
注意:
1字节=8位
1k=1024字节=2^10
1m=1024k
1g=1024m
C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关
,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。
所以int,long int,short int的宽度都可能随编译器而异。
但有几条铁定的原则(ANSI/ISO制订的):
sizeof(short int)<=sizeof(int)
sizeof(int)<=sizeof(long int)
short int至少应为16位(2字节)
long int至少应为32位。
二、不同位数编译器下的基本数据类型所占的字节数
1、16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
2、32位编译器
char :1个字节
char*(即指针变量): 4个字节
(32位的寻址空间是2^32, 即32=8*4个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
3、64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
验证代码如下:
#include <iostream>
using namespace std;
int main()
{
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(char *));
printf("%d\n",sizeof(short int));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(unsigned int));
printf("%d\n",sizeof(float));
// printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(unsigned long long));
}
/*
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
*/
三、拓展小结
由上在64位编译器中运行结果可以看到,char*
与float*
型变量所占字节数相等。这是偶然吗?
当然不是。
这是为什么呢?
指针所占的字节数都是机器的位数。
32位的机器占32/8=4字节
64位的机器占64/8=8字节
如果再有这种要求用sizeof 运算符计算C++中char*, short*, int*, long*, float*,double*等指针类型所占字节数
,不用计算就可以直接得出结果啦!
Ending!
更多课程知识学习记录随后再来吧!
就酱,嘎啦!
注:
人生在勤,不索何获。