基本数据类型所占的字节数【C/C++】

  1.      存储容量单位

        计算机以“位”序列存储数据,每一“位”存储0或1。这里的“位”便是存储信息的一个单位:bit。

        字节:Byte 。1 Byte= 8bits

        字:“字”由若干个字节构成,字的位数叫做字长,字长就是说字所对应的二进制数的长度。不同的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。同理:一台16位机,那么,它的1个字就由2个字节构成,字长为16位;而一台32位机,它的1个字就等于4个字节,字长为32位。

2.      基本数据类型存储空间是否确定

        在C和C++中,基本数据类型所占的存储空间是不确定的, 这与编译环境或者机器硬件架构有关。在C++中,一般地,short类型为半个机器字长,int类型为一个机器字长,而long 类型为一个或两个机器字长。(在32位机器中,int 和long类型通常字长是相同的)。一般float 用一个字来表示,double用两个字来表示——摘自《C++Primer》。

        在Java中,有8种基本数据类型,它们所占的存储空间是确定的,而这种存储空间大小的不变性是是Java程序比其他语言程序更具可移植性的原因之一。另外Java中所有数据类型都是有符号的。

3.      基本数据类型存储空间

   下面在32位win7系统中,分别用VisualStudio 编译C,C++程序,用eclipse编译Java程序。运行结果整理如下:



结果分析:

        对于都存在的数据类型,在测试环境中有两种数据类型存储空间是不同的,上面用蓝色标出。 

测试:(注:C和C++中整型变量存在有符号数和无符号数,Java中都是有符号的,但由于在C和C++中对于某种特定类型而言,有无符号只是取值范围不同而已,并不影响存储空间大小,故测试中采用隐含的形式,即有符号数)

   C标准中并没有具体给出规定那个基本类型应该是多少字节数,而且这个也与机器、OS、编译器有关,比如同样是在32bits的操作系统系,VC++的编译器下int类型为占4个字节;而tuborC下则是2个字节。

   所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):

sizeof(short int)<=sizeof(int)


   所以int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的):

sizeof(short int)<=sizeof(int)

sizeof(int)<=sizeof(long int)

short int至少应为16位(2字节)
long int至少应为32位。

   指针几个字节跟语言无关,而是跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节。

   下面给出不同位数编译器下的基本数据类型所占的字节数:

32位编译器

char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short : 2个字节
int:  4个字节
unsigned int : 4个字节
float:  4个字节
double:   8个字节
long:   4个字节
long long:  8个字节
unsigned long:  4个字节

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()
{
    cout<<"bool: "<<sizeof(bool)<<endl;  
    cout<<"short: "<<sizeof(short)<<endl;  
    cout<<"char: "<<sizeof(char)<<endl;  
    cout<<"int: "<<sizeof(int)<<endl;  
    cout<<"long: "<<sizeof(long)<<endl;  
    cout<<"float: "<<sizeof(float)<<endl;  
    cout<<"double: "<<sizeof(double)<<endl;  
    cout<<"long double: "<<sizeof(long double)<<endl;  
    return 0;  
	
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值