亲自动手——C语言变量所占字节,及自动类型转换

一个经典的问题:一个int占多少字节

      经典C中并没有对一个int占几个字节有具体的规定, The C Programming Language中只规定了:

    Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long.

      即:    2 B ≤ short ≤ int ≤ 4 B≤ long

      故int到底占几个字节,要视不同的操作系统和不同的编译器而定,特别是编译器对其内存的分配。一般而言,对于16位(当然,机器的字长通常也就是操作系统的位数)机器而言,一个int一般占2个字节,32位和64位机器int占4个字节(当然,还要考虑操作系统之上的编译器)。
       那么对于常见的平台VC++6.0和DEV-C++,到底是不是这样呢,动手试试看。



① 平台:VC++6.0, 64 bit win7 




① 平台:DEV-C++5.11, 64 bit win7 



上述两平台结果相同:

char           : 1 B

short        :2 B

int            : 4 B

unsigned :4 B

long         :4 B(规定上只说 int ≤ 4 B≤ long,所以long和int一样长是可以的)

float         :4 B

double     :8 B


另有类型转换表:(横向为必然要进行的转换)


 高            double   ←←    float
  ↑                 ↑             
  ↑              long     
  ↑                ↑
  ↑           unsigned
  ↑               ↑
 低              int
      ← ←  char,short

             自动转换顺序表



PS:

一方面,经典C的实质标准The C Programming Language是后来C89,C99的重要理论参考,其规定的重要性不言而喻,也是众多C语言开发者,研究者的“圣经”;

另一方面,The C Programming Language》在很多方面只对C的特性进行了描述,并没有给出具体实现,也没有硬性规定。并且,即使是后来ISO制定的C89,C99,具体的C编译器也不一定全都遵守/支持。所以对于The C Programming Language或者后来的各类标准,只能作参考,怎么实现还要看具体的编译器,机器情况,这也是动手的意义所在。





参考:http://blog.51cto.com/charlesxie/939680


声明:除已注明的引用外,文章系作者原创,引用转载请注明出处,如有必要请联系作者。





猜你喜欢

转载自blog.csdn.net/prolayman/article/details/79710869