测试数据长度

测试数据长度

main()
{
 char ch;

 printf("char:%d\n",sizeof(char));

 printf("short int:%d,int:%d,lint:%d\n",sizeof(short int),sizeof(int),sizeof (long int));

 printf("float:%d,lfloat:%d\n",sizeof(float),sizeof(long float));

 printf("double:%d,ldouble:%d\n",sizeof(double),sizeof(long double));

}

 

 

程序运行结果为

char:1
short int:2,int:4,lint:4
float:4,lfloat:8
double:8,ldouble:8

 

 

 

 

2.1.1 五种基本数据类型

 

 

 

 

 

 

 

  C语言提供的五种基本数据类型以及对应的关键字如下:

 

  数据类型,

关键字

  字符型,

  整型,

  浮点(单精度)型,

  双精度型,

  无值类型,

char

int

float

double

void

 

    其中,字符型(char)通常描述一个字符;整型(int)描述我们日常使用的整数,整数在计算机中是准确表示的;浮点型(float)和双精度型(double)描述我们日常使用的实数,实数在计算机中一般是近似表示的,浮点型的近似程度比较低,而双精度型的近似程度则比较高,因此,浮点型有时也叫单精度型;无值类型(void)没有具体的值,通常描述一个无形式参数的C函数、无返回值的C函数或无定向指针等。

 

 

 

 

 

 

 

 

    2.1.2 基本数据类型存储方式和取值范围

 

 

 

    不同类型的数据在计算机中的存储方式是不同的,即它们的存储结构和所占的存储空间字节数并不一样。这不是C语言本身的规定,而是与宿主计算机的硬件特性有关。

 

    1. char型  char型数据占1字节存储空间,有的机器(如IBM PC系列)按有符号形式存储,采用二进制补码,这样,其表示范围为-128~127。有的机器则以无符号二进制形式存储,所能表示的字符十进制ASCII或EBCDIC代码值为0~255。有符号和无符号数之间的区别在于对数的最高位的处理:有符号数将最高位视为符号位,0表示正号,1表示负号;无符号数则将最高位也视为数值位。

 

    2.int型   int型数据占2字节存储空间,按有符号形式存储,有的机器采用定点二进制原码形式,所能表示的数值范围为-32767~32767;IBM PC系列计算机则以定点二进制补码形式存储,所能表示的数值范围为-32768~32767。

 

    3. float型   float型数据占4字节存储空间,以浮点形式存储,即将存储空间分成两部分,一部分表示指数,用定点纯整数形式,另一部分表示尾数,用定点纯小数形式。在IBM PC系列机上,阶码(二进制指数的幂次)占8位(增码表示),尾数占24位(归一化补码表示),因此它所能表示的十进制数值范围为-3.4×1038 ~3.4×1038 ,6位有效数字精度,分辨率(可识别的最小正数)约为3.9×10-38 ,即对小于3.9×10-38 的正数不再区分,作为0来处理(称为下溢)。

 

    4. double型  double型数据占8字节存储空间,存储方式与float基本相同,在IBM PC机上,阶码占11位,尾数占53位,因此它所能表示的数据范围约为-1.7×10308 ~1.7×10308 ,16位有效数字精度,分辨率约为10-308 。

 

表2.1列出几种不同类型计算机上各种数据类型所占的二进制位(bit)数。C基本数据类型的长度及其取值范围见表2.2(IBM PC系列计算机)。

 

           表2.1  不同计算机中数据类型的长度(bit数)

 

计算机型

IBM PC

DEC PDP-11

DEC VAX

Honey well 6000

IBM 370

Interpata 8/32

数据类型

ASCII

  ASCII

 ASCII

    ASCII

 EBCDIC

    ASCII

char

  8

    8

   8

      9

   8

      8

int

  16

    16

   32

      36

   32

      32

short int

  16

    16

   16

      36

   16

      16

long int

  32

    32

   32

      36

   32

      32

float

  32

    32

   32

      36

   32

      32

double

  64

    64

   64

      72

   64

      64

 

    表2.2  C基本数据类型的长度和取值范围(IBMPC系列)

 

       类型

长度(bit)

       取值范围

char

8

-128~127

[signed] char

8

-128~127

unsigned char

8

0~255

int

16

-32768~32767

[signed] int

16

-32768~32767

unsigned [int]

16

0~65535

short int

16

-32768~32767

unsigned short [int]

16

0-65535

long int

32

-2147483648~2147483647

[signed] long [int]

32

-2147483648~2147483647

unsigned long [int]

32

0~4294967295

float

32

-3.4×1038 ~3.4×1038

double

64

-1.7×10308 ~1.7×10308

long double

80

-1.7×10308 ~1.7×10308

 

注:方括号内的关键字可省略

 

 

 

    2.1.3 基本数据类型的修饰

 

    C语言规定,在基本数据类型之前还可以加上类型修饰符

 

        signed,unsigned,short,long

 

和存取修饰符

 

        const,volatile。

 

    1. 类型修饰符

 

    类型修饰符用于更改基本类型的含义,以适应更为精确情况的需要。

 

    signed和unsigned规定了对数值符号的处理方法,只限于char型和int型。无符号数总为正值或零,且服从模为2的n次幂定律。这里的n表示该类型所具有的二进制位数。若char型数据占8位,则unsigned char型数据的取值范围为0~255,而signed char型数据的取值范围则为-128~127(在使用2的补码的计算机上)。int型数据的signed和unsigned修饰与char型类似。例如,signed int和int的存储方式及取值范围完全相同,而unsigned int采用无符号数的方式存储,其取值范围则为0~65535。

 

    short和long可以提供不同的数据长度以满足实际使用的需要。例如,int型数据的长度通常反映了宿主计算机的自然字长,short int常为16位,long int 常为32位,而int则为16位或32位(IBM PC系列为16位),long int的取值范围变为-2147483648~2147483647。不同C编译系统可以选择合适的长度以适应自身的硬件,但要满足如下的限制:short int和int至少为16位,long int 至少为32位,且short int不长于int,int不长于long int 。有的C编译系统还允许对double进行long限定,一般地,float不长于double,double不长于long double。

 

    对类型修饰符,说明以下几点:

 

    (1) char型数据可用signed和unsigned加以修饰,即可能出现char、signed char或unsigned char;

 

    (2) int型数据可用signed、unsigned、short和long加以修饰,即可出现int、signed int 、unsigned int、long int、signed long int、unsigned long int等,当使用类型修饰符后,关键字int可省略不写,例如signed long等价于signed long int;

 

    (3) 有的编译系统允许对double施加long修饰,使其成为超精度型数据。在Turbo C中,long double型数据占10字节存储空间,阶码11位,尾数69位,除了具有更多的有效数字(20位)外,数据表示范围及分辨率均与double型相同。早期的C语言版本允许使用long float等价于double ,现已不用;

 

    (4) C语言的ANSI C标准指出:各种变量的取值范围应该在标题文件(limits.h)和(float.h)中作出定义,因此,可以从上述标题文件中打印出相应的值。

 

    2. 存取修饰符

 

    存取修饰符const和volatile可放在任何类型之前,用于限制变量存取或修改的方法。

 

使用const修饰的变量,相当于符号常数,可存放在只读内存中,除了初始化外,不能由程序修改;使用volatile修饰的变量,则可以被修改,既可以在程序中修改它,也可以在程序外,如中断过程或I/O端口修改它。把一个对象说明为volatile,就告知编译系统在计算有该对象的表达式时,不必关心对象的值,因为其值(理论上)可在任何时刻改变。该修饰符防止编译系统把该变量当作寄存器变量处理。任何类型的变量都可用const或volatile修饰,const修饰就宣告它的值不会被修改,volatile修饰后就宣告它有和最优化有关的特殊性质。初学者对const和volatile可不必深究。

 

 

 

 

 

转载于:https://www.cnblogs.com/better-yiyi/p/3161658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值