1.数据类型的长度是由谁决定的?
首先与CPU有关,其次与编译系统和适用平台也有关。最直接的使用,长度有编译系统决定。而不是有操作系统决定。
2.
32位机
32位机
类型 | 最小范围 |
char | 0~127 |
signed char | -127~127 |
unsigend char | 0~254 |
short int | -32767~32767 |
unsigned short int | 0~65535 |
int | -32767~32767 |
unsigned int | 0~65535 |
long int | -2147483647~2147483647 |
unsigned long int | 0~4294967295 |
3.编写一段代码,可在两台机器上实现无修改移植,这两台机器的区别为:
a机器:缺省类型为16位,长整形为32位
b机器:缺省类型为32位,长整形为64位
其它具体情况:程序所使用的有些变量的值并不太大,足以保存与任何一台机器的缺省整形变量中,但有些变量较大,必须32位才能保存。
解决方案分析:
1.可以将所有数据统一定义为32位long型,但是,这对与那些只需要16位就可定义的数据来说,对系统时间和空间的浪费不可忽视。所有此法不可取;
2.可以尝试使用头文件,在自己定义的头文件中,将16位,32位数据类型使用typedef重新定义声明,将两种平台的数据类型整合到一个头文件下,到时候各取所需。这也是现在嵌入式编程的常用方式。
引用-----声明整型变量名,使变量的类型必须有一个确定的长度(如int8,int16,int32)。对于你希望成为缺省长度的整数,根据它所容纳的最大值,使用类似defint8,defint16,defint32这样的名字。然后为每台机器创建一个名为int_size.h的文件,它包含一些typedef声明,为你创建的类型名字选择最合适的整形长度。
在一个典型的32位机器上,这个文件包括:
typedef signed char int8; |
typedef short int int16; |
typedef int int32; |
typedef int defint8; |
typedef int defint16; |
typedef int defint32; |
typedef signed char int8; |
typedef short int int16; |
typedef long int int32; |
typedef int defint8; |
typedef int defint16; |
typedef int defint32; |
4.枚举存在的意义
随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。 在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型