4.1.5 限定词:long、long long、short、unsigned及signed
如果直接把限定词long放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。一个long int声明的例子为:
long int factorial;
这条语句将变量fractorial声明为long的整型变量。就像float和double变量一样,long变量的具体精度也是由具体的计算机系统决定。在许多系统上,int与long int具有相同的值域,而且任何一个都能存储32位宽(231-1,或2,147,483,647)的整型值。
long int类型的常量值可通过在整型常量末尾添加字母L(大小写均可)来形成。但数字和L之间不允许有空格。因此,声明
long int numberOfPoints=131071100L;
将变量numberOfPoints声明为long int类型,而且初值为131,071,100。
要用NSLog显示long int的值,使用字母l作为修饰符并放在整型格式符号i、o和x之前。这意味着格式符号%li用十进制格式显示long int的值,符号%lo用八进制格式显示值,而符号%lx则用十六进制格式显示值。
可以如下形式使用long long的整型数据类型:
long long int maxAllowedStorage;
这条语句把将指定的变量声明为具有特定扩展精度的变量,该扩展精度保证变量至少具有64位的宽度。NSLog字符串不使用单个字母l,而使用两个l来显示long long的整数,例如“lli”。
同样可将long标识符放在double声明之前,如下:
long double US_deficit_2004;
long double常量可写成其尾部带有字母l或L的浮点常量,如下:
1.234e+7L
要显示long double的值,需要使用修饰符L。因此,%Lf用浮点计数法显示long double的值,%Le用科学计数法显示同样的值,而%Lg将告诉NSLog在%Lf和%Le之间任选一个使用。
把限定词short放在int声明之前时,它告诉Objective-C编译器要声明的特定变量用来存储相当小的整数。之所以使用short变量,主要原因是对节约内存空间的考虑,当程序员需要大量内存而可用的内存量又十分有限时,就可用short变量来解决这个问题。
在某些计算机上,short int占用的内存空间是常规int变量所占空间的一半。在任何情况下,确保分配给short int的空间数量不少于16位。
在Objective-C中,没有其他方法可显式地编写short int型常量。要显示short int变量,可将字母h放在任何普通的整型转换符号之前,如:%hi、%ho或%hx。换句话说,可用任何整型转换符号来显示short int,因为当它作为参数传递给NSLog例程时,可转换成整数。
最终限定词可放在int变量之前,当整数变量只用来存储正数的情况下使用最终限定符。以下语句
unsigned int counter;
向编译器声明:变量counter只用于保存正值。通过限制整型变量的使用,使它专门存储正整数,可以扩展整型变量的精度。
通过将字母u(或U)放在常量之后,可产生unsigned int常量,如下:
0x00ffU
编写整型常量时,可将字母u(或U)和l(或L)组合起来使用,因此
20000UL
告诉编译器将常量20000看作unsigned long。
如果整型常量之后不带有字母u、U、l或L中的任何一个,而且它太大以至于不适合用普通大小的int表示,那么编译器将把它看作unsigned int值。如果它太小以至于不适合用unsigned int表示,那么编译器将把它看作long int。如果仍然不适合用long int表示,编译器就会把它视为unsigned long int。
将变量声明为long int、short int或unsigned int类型时,关键字int可以省略。因此,unsigned变量counter可等价地声明为以下形式:
unsigned counter;
同样可将char变量声明为unsigned。
signed限定词可明确地告诉编译器特定变量是有符号的。它主要用在char声明前面,有关它的深层讨论已超出了本书的范围。