zoukankan      html  css  js  c++  java
  • 数据类型和常量

    你已经遇到过Objective-C的基本数据类型int。回顾一下,声明为int类型的变量只能用于保存整型值,也就是不包含小数位数的值。

    Objective-C还提供了另外3种基本数据类型:floatdoublechar。声明为float类型的变量可以存储浮点数(即包含小数位数的值)。double类型和float类型一样,通常,前者表示的范围大约是后者的两倍。char数据类型可存储单个字符,例如字母a、数字字符6或者一个分号(后面将详细讨论有关内容)。

    Objective-C中,任何数字、单个字符或者字符串通常都称为常量。例如,数字58表示一个常量整数值,字符串@"Programming in Objective-C is fun."表示一个常量字符串对象。完全由常量值组成的表达式叫做常量表达式。因此,下面的表达式是一个常量表达式,因为该表达式的每一项都是常量值:

    128 + 7 - 17

    然而,如果将i声明为整型变量,那么表达式就不是一个常量表达式:

    128 + 7 – i

    int类型

    整数常量由一个或多个数字的序列组成。序列前的负号表示该值是一个负数。值158-100都是合法的整数常量。数字中间不允许插入空格,并且不能使用逗号(因此,12,000是一个非法的整数常量,它必须写成12000)。

    每个值无论是字符、整数还是浮点数字,都有与其对应的值域。这个值域与系统为特定类型的值分配的内存量有关。一般来说,在语言中没有规定这个量,它通常依赖于所运行的计算机,因此,叫做设备或机器相关量。例如,一个整数可在计算机上占用32位,或者可以使用64位存储。如果使用64位存储,整型变量将能够存储比32位更大的数值。

     

    注意

    Mac OS X中,提供了选择应用程序是在32位还是64位下编译。在前一种情况下,一个int占用32位;在后一种情况下,一个int占用64位。

    float类型

    声明为float类型的变量可以存储包含小数位的值。要区分浮点常量,可以看它是否包含小数点。值3.125.8-.0001都是合法的浮点常量。要显示浮点值,可用NSLog转换字符%f或者%g

    浮点常量也能用所谓的科学计数法来表示。值1.7e4就是使用这种计数法来表示的浮点值,它表示值1.7×104

    如上所述,double类型与float类型非常相似,只是double类型的变量可存储的范围大概是float变量的两倍。

    char类型

    char变量可存储单个字符。将字符放入一对单引号中就能得到字符常量。因此,'a'';''0'都是合法的字符常量。第一个常量表示字母a,第二个表示分号,第三个表示字符0,它并不等同于数字0。不要把字符常量和C语言风格的字符串混为一谈,字符常量是放在单引号中的单个字符,而字符串则是放在双引号中的任意个数的字符。正如在第3章提及的,前面有@字符并且放在双引号中的字符串是NSString字符串对象。

    字符常量'\n'(即换行符)是一个合法的字符常量,尽管它似乎与前面提到的规则矛盾。这是因为反斜杠符号被认为是特殊符号。换句话说,Objective-C编译器将字符'\n'看做单个字符,尽管它实际上由两个字符组成。其他特殊字符也是以反斜杠字符开头的。在NSLog调用中可以使用格式字符%c,以便显示char变量的值。

    在代码清单4-1中,使用了基本的Objective-C数据类型。

    代码清单4-1

    #import <Foundation/Foundation.h>

     

    int main (int argc, char *argv[])

    {

       @autoreleasepool {

          int    integerVar = 100;

          float floatingVar = 331.79;

          double doubleVar = 8.44e+11;

          char   charVar = 'W';

     

          NSLog (@"integerVar = %i", integerVar);

          NSLog (@"floatingVar = %f", floatingVar);

          NSLog (@"doubleVar = %e", doubleVar);

          NSLog (@"doubleVar = %g", doubleVar);

          NSLog (@"charVar = %c", charVar);

        }

        return 0;

    }

     

    代码清单4-1  输出

    integerVar = 100

    floatingVar = 331.790009

    doubleVar = 8.440000e+11

    doubleVar = 8.44e+11

    charVar = W

     

    在程序输出的第二行,你会注意到指定给floatingVar的值331.79,实际显示成了331.790009。事实上,实际显示的值是由具体使用的计算机系统决定的。出现这种不准确值的原因在于,计算机内部使用了特殊的方式表示数字。使用计算器处理数字时,很可能遇到相同的不准确性。如果用计算器计算1除以3,将得到结果.33333333,很可能结尾带有一些附加的3。这一串3是计算器计算1/3的近似值。理论上,应该存在无限个3。然而该计算器只能保存这些位的数字,这就是计算机的不确定性。同样的不确定性也出现在这里:在计算机内存中不能精确地表示一些浮点值。

    限定词:long、long long、short、unsigned及signed

    如果直接把限定词long放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。一个long int声明的例子为:

    long int factorial;

    这条语句将变量fractorial声明为long的整型变量。就像floatdouble变量一样,long变量的具体范围也是由具体的计算机系统决定的。

    要用NSLog显示long int的值,就要使用字母l作为修饰符,放在整型格式符号之前。这意味着格式符号%li将用十进制格式显示long int的值。

    你也可以使用long long int变量,甚至是具有更大范围带有浮点数的long double变量。

    把限定词short放在int声明之前时,它告诉Objective-C编译器要声明的特定变量用来存储相当小的整数。之所以使用short变量,主要原因是对节约内存空间的考虑,当程序员需要大量内存而可用的内存量又十分有限时,就可用short变量来解决这个问题。

    最后一个可以放在int变量之前的限定词,是在整数变量只用来存储正数的情况下使用的。以下语句

    unsigned int counter;

    向编译器声明,变量counter只用于保存正值。通过限制整型变量的使用,让它专门用于存储正整数,可以扩展整型变量的范围。

    id类型

    id数据类型可存储任何类型的对象。从某种意义说,它是一般对象类型。例如,程序行

    id   graphicObject;

    graphicObject声明为id类型的变量。可声明方法使其具有id类型的返回值,如下:

    -(id) newObject: (int) type;

    这个程序行声明了一个名为newObject的实例方法,它具有名为type的单个整型参数并有id类型的返回值。

    id类型是本书经常使用的一种重要的数据类型。这里介绍该类型的目的是为了保持本书的完整性。id类型是Objective-C中十分重要的特性,它是多态和动态绑定的基础,这两个特性将在第9章“多态、动态类型和动态绑定”中详细讨论。

    4.1总结了基本数据类型和限定词。

    4.1  基础数据类型

       

       

    NSLog字符

    char

    'a''\n'

    %c

    short int

    %hi%hx%ho  

    unsigned short int

    %hu%hx%ho %hu%hx%ho

    int

    12-970xFFE00177

    %i%x%o

    unsigned int

    12u100U0XFFu

    %u%x%o

    long int

    12L-20010xffffL

    %li%lx%lo

    unsigned long int

    12UL100ul0xffeeUL

    %lu%lx%lo

    long long int

    0xe5e5e5e5LL500ll

    %lli%llx&llo

    unsigned long long int

    12ull0xffeeULL

    %llu%llx%llo

    float

    12.34f3.1e-5f0x1.5p100x1P-1

    %f%e%g%a

    double

    12.343.1e-50x.1p3

    %f%e%g%a

    long double

    12.34L3.1e-5l

    %Lf$Le%Lg

    id

    nil

    %p

     

    注意

    在表4.1中,在整型常量中以0开头表示常量是八进制(基数8)的,以0x开头或(0X)表示它是十六进制(基数16)的,数字0x.1p3表示十六进制浮点常量。不必担心这些格式,这里只是为了使表格完整进行的总结。此外,前缀fl(L)u(U)ll(LL)用来明确表示常量是floatlongunsignedlong long类型。

     

     

    本文节选自《Objective-C 程序设计(4)

     

     

    电子工业出版社出版

    []Stephen G. Kochan(斯蒂芬·G·科昌)著

    林冀 范俊 朱奕欣译

     

  • 相关阅读:
    用 jQuery Masonry 插件创建瀑布流式的页面
    ecshop标签大全 各个页面常用标签大全
    Logistic Regression Using Gradient Descent -- Binary Classification 代码实现
    Linear Regression Using Least Squares Method 代码实现
    eigen quick reference
    Linear Regression Using Gradient Descent 代码实现
    eigen 笔记2
    eigen 笔记1
    Floyd 判圈算法
    SQL Expression Language Tutorial 学习笔记二
  • 原文地址:https://www.cnblogs.com/broadview/p/2759838.html
Copyright © 2011-2022 走看看