现在的位置: 首页 > 综合 > 正文

C/C++数据类型(网上资料总结)

2013年09月21日 ⁄ 综合 ⁄ 共 3648字 ⁄ 字号 评论关闭

1. c语言中的整数类型有char, short, int, long等几种, 下面是C语言对每种数据类型长度的规定:
(a). short和long类型的长度不相同
(b). int类型通常同具体机器的物理字长相同
(c). short通常是16bits, int通常是16bits or 32bits每种编译器可以根据硬件的不同自由确定, 但是short和int必须最少是16bits, 而long类型必须最少是32bits, 并且short必须比int和long类型要短。
2. sizeof() 运算符返回的是一种数据类型中所包含的字节数(bytes), AnsiC规定sizeof(char)必须返回1,当sizeof作用于数组时, 返回的是数组中所有成员所占的字节数(注意并不是数组中成员的个数), 当sizeof()作用于结构体和公用体时,返回的不仅仅是数据成员总的字节数, 还包括编译器为了实现字节对其而填充的那些字节。

---------------------------------------------------------------------------------------------------------------------------------------------

C++数据类型长度问题:
一、字节和字长
字节,八位就是一个字节,是固定概念。字长是指计算机一次能处理的二进制数据的长度,是一个非固定的概念。例如,8位计算机的字长为8,即一个字节, 32位计算机的字长位32,即4个字节,同理,64位计算机的字长为64,即8字节。
二、C++中的数据类型
1、字符型数据char,该类型始终是一个字节长,即8位。
2、整形int、短整型short和长整形long。通常int为一个字长,short为半个字长,long为一个或2个字长(在32位机器中为一个字长)。
3、浮点型float、双精度double、和长双精度long double,分别表示单精度浮点数 双精度浮点数和扩展精度的浮点数值。典型情况下,float 为一个字,double是两个字,long double为两个或三个或四个字。

 

 

char,short,int和long类型分别有多长?
   
其长度分别为一字节,至少两字节,至少两字节和至少4字节。除此之外,不要再依赖任何约定。
    char类型的长度被定义为一个8位字节,这很简单。
    short类型的长度至少为两字节。在有些计算机上,对于有些编译程序,short类型的长度可能为4字节,或者更长。
    int类型是一个整数的“自然”大小,其长度至少为两字节,并且至少要和short类型一样长。在16位计算机上,int类型的长度可能为两字节;在32位计算机上,可能为4字节;当64位计算机流行起来后,int类型的长度可能会达到8字节。这里说的都是“可能”,例如,早期的Motorala 68000是一种16/32位的混合型计算机,依赖于不同的命令行选项,一个68000编译程序能产生两字节长或4字节长的int类型。
    long类型至少和int类型一样长(因此,它也至少和short类型一样长)。long类型的长度至少为4字节。32位计算机上的编译程序可能会使short,int和long类型的长度都为4字节——也可能不会。
    如果你需要一个4字节长的整型变量,你不要想当然地以为int或long类型能满足要求,而要用typedef把一种固有的类型(一种确实存在的类型)定义为你所需要的类型,并在它的前后加上相应的#ifdef指令:
    #ifdef FOUR_BYTE_LONG
    typedef long int4;
    #endif
    如果你需要把一个整型变量以字节流的方式写到文件中或网络上,然后再从不同的计算机上读出来,你可能就会用到这样的类型(如果你要这样做,请参见15.5)。
    如果你需要一个两字节长的整型变量,你可能会遇到一些麻烦!因为并不一定有这样的类型。但是,你总是可以把一个较小的值存放到一个由两个char类型组成的数组中

 

 

C语言中的整型数据类型 int、short int 和 long int

一、表示范围,占用空间

标准规定,int 的表示范围不能小于 short 的表示范围,long 的表示范围不能小于 int 的表示范围。这就是说 short 型变量占用的空间可能比 int 型变量少,而 long 型变量占用的空间可能比 int 型变量多。

16 位(bit)的计算机中,int 和 short 一般都是 16 位,而 long 是 32 位;

32 位(bit)的计算机中,short 一般是 16 位,而 long 和 int 是 32 位。TC2(16位的编译器)中,int 是 16 位的;而 Dev-C++(32 位的编译器)中,int 是 32 位的。

二、16 位(bit)的编译环境下:

 

名称

全称类型说明符 缩写类型说明符       位数                     范围
整型 int int 16位      -32768至+32767
无符号整型 unsigned int unsigned 16位 0 至 65,535
短整型 short int short 16位 -32768至+32767
无符号短整型      unsigned short int   unsigned short 16位 0 至 65,535
长整型 long int long 32位 -2,147,483,648 至 2,147,483,647
无符号长整型      unsigned long int      unsigned long         32位     0至4,294,967,295

三、C语言中整型 常量 有三种不同的表示形式:

     1、八进制整型常量:在八进制数值前面加前缀“0”,其数码取值为0~7。例如:054、0567、05421。

     2、十六进制整型常量:前缀为“0X”或“0x“,其数码取值为0~9、A~F 或 a~f。例如:0X3D、0XE0、0xfff等。

     3、十进制整型常量:既无前缀也无后缀。例如:254、745、890等。 如将存储为long类型,需要在数字序列最后附一个字母L 或 l 作为后缀。例如:245L、7850L、124l等

 

四、整数类型的选择

如果您要处理的只是非负整数,那么应该优先使用 unsigned 打头的那些整数类型。如果您要处理的整数超出了 int 所能表示的范围,并且您的编译器中,long 的表示范围比 int 大,那就使用 long。不过,若非必要,尽量不要用 long,因为它 可能会降低程序运行效率。有一点要注意:如果您的编译器中,long 和 int 都是 32 位的,并且您需要使用 32 位整数,那么应该用 long,而不要用 int。只有这样,我们的程序才可以安全地移植到 16 位的计算机,因为 16 位的计算机中,int 一般也是 16 位的。类似地,如果您需要使用 64 位整数,那就用 long long。如果 int 是 32 位的话,那么使用 short 可以节省空间,不过您得确保您要处理的整数不会超出 short 的表示范围。这种“节省”对内存大的计算机来说,是没什么意义的。

五、long 型常量和 long long 型常量
一般来说,整数常量是被当作 int 类型来存储的。如果我们使用的整数常量超出了 int 的表示范围,C 语言规定编译器自动使用 unsigned int 来处理这个常量。如果 unsigned 也不足以表示这个常量的话,编译器就会用 long。如果还表示不了的话,那就依次用 unsigned long,long long,unsigned long long。如果 unsigned long long 也表示不了,那么编译器就没辙了。注意:long long 和 unsigned long long 是 C99 特有的。例如:如果 int 是 16 位的话,它就表示不了常量 1000000。编译器会使用 long 来处理这个常量,因为 unsigned int 也表示不了 1000000 。
同样,十六进制和八进制整数常量通常也是被作为 int 来处理。但是,当我们使用的常量超出了 int 的表示范围后,编译器会依次使用unsigned int,long,unsigned long,long long 和 unsigned long long。直到所使用的类型足以表示那个常量为止。
有时,我们使用的是较小的常量,但是我们希望这个常量被当作 long 来处理,这就需要在这个常量后面加上后缀 l(小写字母 l)或者 L(大写字母 L)。我们应该避免使用 l ,因为 l 容易和数字 1 混淆。例如:整数常量 7 是被作为 int 来处理的,但整数常量 7L(或者 7l)是被作为 long 来处理的。类似地,在整数常量后面加上后缀 ll 或者 LL ,这个常量就会被当作 long long 来处理。例如:3LL 。如果想使用无符号整数常量的话,还要配合使用后缀 u 或者 U 。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。
这些后缀也可以用于十六进制和八进制整数常量。例如:020L,010LL,0x30uL,0x40ull 。

抱歉!评论已关闭.