资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
基本数据类型 C 语言中只有 4 中基本数据类型整型、浮点型、指针和聚合类型(如数组和结构等);所有其他类型都是从这 4 种基本类型的某种变化或组合派生而来。 一、整型家族 整型家族包括 char、short int、int 和 long int,并且都分为 signed 和 unsigned 型。 int 型字长问题: long int 型至少应该和 int 型一样长,而 int 型至少应该和 short int 一样长。 C/C+规定 int 字长和机器字长相同; 操作系统字长和机器字长未必一致; 编译器根据操作系统字长来定义 int 字长; 由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int 的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时 编译器根据操作系统的字长来定义 int 字长:“比如你在 64 位机器上运行 DOS16 系统,那么所有 for dos16 的 C/C+编译器中 int 都是 16 位的;在 64 位机器上运行 win32 系统,那么所有 for win32 的 C/C+编译器中 int 都是 32 位的”。(CPU 的“字长”是指其一条指令/一次运算可以处理的数据的最大宽度。) 另外,对于整型的数值范围,每个编译器里面都有一个标准头文件:limits.h,这个头文件定义了一些宏,这些宏表示该编译器使用的所有数据类型的范 围,编程过程中 使用这些宏就行了。例如你想要的 int 的最大值可以使用宏 INT_MAX,最小值使用 INT_MIN,而无符号则可以使用UINT_MAX,还有其它类型的。你自己把这个头文件打开看看就知道了。整形变量是不是 32 位这个问题不仅与具体的 CPU 架构有关,而且与编译器有关。在嵌入式系统的编程中,一般整数的位数等于 CPU 字长,常用的嵌入式 CPU 芯片的字长为 8、16、32,因而整形变量的长度可能是 8、 16、32。在未来 64 位平台下,整形变量的长度可达到 64 位。 长整形变量的长度一般为 CPU 字长的 2 倍。基本数据类型字节大小 int 型字长问题: C/C+规定 int 字长和机器字长相同; 操作系统字长和机器字长未必一致; 编译器根据操作系统字长来定义 int 字长;由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int 的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义 int 字长:“比如你在 64 位机器上运行 DOS16 系统,那么所有 for dos16 的 C/C+编译器中 int 都是 16 位的;在 64 位机器上运行 win32 系统,那么所有 for win32 的 C/C+编译器中 int 都是 32 位的“常见基本类型的字节大小32 位操作系统char :1 个字节(固定)*(即指针变量): 4 个字节(32 位机的寻址空间是 4 个字节。同理 64 位编译器)(变化*)short int : 2 个字节(固定)int: 4 个字节(固定)unsigned int : 4 个字节(固定)float: 4 个字节(固定)double: 8 个字节(固定)long: 4 个字节unsigned long: 4 个字节(变化*,其实就是寻址控件的地址长度数值)long long: 8 个字节(固定)64 位操作系统char :1 个字节(固定)*(即指针变量): 8 个字节short int : 2 个字节(固定)int: 4 个字节(固定)unsigned int : 4 个字节(固定)float: 4 个字节(固定)double: 8 个字节(固定)long: 8 个字节unsigned long: 8 个字节(变化*其实就是寻址控件的地址长度数值)long long: 8 个字节(固定)除了*与 long 随操作系统子长变化而变化外,其他的都固定不变(32 位和 64 相比)bool 1 个字节 char 1 个字节 int 4 个字节 float 4 个字节 doubl 8 个字节 long long 8 个字节几种常见的数据类型包括:int, short int,long int, double,float,char,可以划分数值类(整型、浮点型),字符类,各种数据类的字长一般与机器字长相关联。1、 int, short int, long int(默认为带符号类型 signed):int 一般为一个机器字长,short int 为半个机器字长,而在 32 位机器中,long int 与 int 有一样的字长。所以对于 32 位机器(比较常见)来说,int-32 位,short int 16 位,long int -32 位(在 16 位机器中亦是)。2、 float, double float, longdouble:float 通常一个机器字长(32 位),double 是两个机器字长(64 位),longdouble 是三个或四个字长,有时也会市两个机器字长(64 位)。3、 char: 8 位,一个字节int 型长度不仅与具体的 CPU 架构有关,而且与编译器有关。int 型长度的确定有三个准则: C/C+规定 int 字长和机器字长相同; 操作系统字长和机器字长未必一致;(前者小于等于后者) 编译器根据操作系统字长来定义 int 字长;整形变量是不是 32 位这个问题不仅与具体的 CPU 架构有关,而且与编译器有关,所以 int 可以为 32 为或 16 为,而 short 为短整型变量,只能为 16 位int 占一个机器字长。在 32 位系统中 int 占 32 位,也就是 4 个字节,而在老式的 16 位 系统中,int 占 16 位,即 2 个字节。而 C+标准中只限制规定 short int 不能超过 int 的长度, 具体长度的可以由 C+编译器的实现厂商自行决定。目前流行的 32 位 C+编译器中,通 常 int 占 4 字节,short int 占 2 字节。其中 short int 可以简写为 short。类似地,C+标准只 限制了 long int 不得小于 int 的长度,具体也没有作出限制。 几种常见的数据类型包括:int, short,long, double,float, char,可以划分 数值类(整型、浮点型),字符类,各种数据类的字长一般与机器字长相关联。 1、 int, short, long int(默认为带符号类型 signed):int 一般为一个机器字 长,short 为半个机器字长,而在 32 位机器中,long 与 int 有一样的字长。所以对于 32 位机器(比较常见)来说,int -32 位,short16 位,long-32 位。 2、 float, double:float 通常一个机器字长(32 位),double 是两个机器字长 (64 位)。float-32 位double-64 位 3、 char: 8 位,一个字节char-8 位整型家族包括字符,长整型,短整型,整型。 整型就是我们常说的 int,它是一种缺省状态。 ANSI 标准特别注意了各个环境的可移植问题。规定了各个变量的最小范围。 char 0127 signed char-127127 unsigned char0255 short int-3276732767 unsigned short int065535 int-3276732767 unsigned int065535 long int-214748367214748367 unsigned long int04292947695 主要几点:short int 至少十六位,long int 至少 32 位,至于缺省的 int 是 16 位还是 32 位,由编译器 决定。但通常这个值选定为机器的最为自然数。长整型至少应该和整型一样长,而整型至少要和短整型一样长。标准只做了这样的限制。 没有规定他们必须不一样。如果是 32 位的机器,很可能编译器把长、短和缺省都设置为 32 位,因为没有什么指令能够处理比这更短的值。算是互相补补课,玩 flash 的兄弟们跟这种基础的数据打交道少,当是“重温旧梦”了。如果总线宽度与 CPU 一次处理的数据宽度相同,则这个宽度就是所说的单片机位数。 如果总线宽度与 CPU 一次处理的数据宽度不同: 1)总线宽度小于 CPU 一次处理的数据宽度,则以 CPU 的数据宽度定义单片机的位数,但 称为准多少位。比如著名的 Intel 8088,CPU 是 16 位但总线是 8 位,所以它是准 16 位。 2)总线宽度小于 CPU 一次处理的数据宽度,则以 CPU 的数据宽度定义单片机的位数。8 位、16 位、32 位是指单片机的“字长” ,也就是一次运算中参与运算的数据长度,这个 位是指二进制位。 8 位、16 位、32 位与单片机的性能密切相关,通常 32 位机的性能要高于 16 位机,而 16 位机的性能又要高于 8 位机。为什么会这样呢?这要从 2 个方面来分析。第一,位数不同, 运算效率不同。对于 8 位机而言,由于在一次运算中的每一个数都不能超过 8 位,因此即 便如 100+200=300 这样的运算,它也不能一次完成,因为 300 已超过了 8 位所能表达的最 大范围(255) ,因此,要对这样的一个式子进行运算,就要编写一段程序,将运算分步完 成,最后合成起来得到一个正确的结果。而如果采用 16 位单片机来运算的话,那么一次运 算就够了,显然分步完成所需要的时间要远远大于单步完成所需要的时间。同样道理,当某个运算的结果或者中间值大于 65535 时,16 位机也不能一次运算,要分步实现它,而 32 位机则可以一次运算完成。第二,商业因素。通常运算能力越高,表示这个单片机性能越 强,当然,价格高一些人们也可以接受,有了价格空间,生产商通常都会在这些芯片中提 供更多的其他的功能,使得芯片的整体性能得到更大的提升。典型的单片机中,80C51 系列,PIC 系列,AVR 系列都是 8 位单片机; 80C196、MSP430 系列是 16 位机;而目前非常热门的 ARM 系列则是 32 位机。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号