Objective-C學習筆記:數據類型和表達式


 1.數據類型和常量:

 在Objective-c中提供了4種基本的數據類型:int float double以及char.

聲明為int的變量只能用於保存整形值

聲明為float類型的變量可存儲浮點類型值(即包含小數位數.). 

double類型和float類型一樣,只不過前者的精度大約是后者的2倍。

最后是char 數據類型,char類型可用來存儲單個字符,例如字母a,數字6,或是一個分號。

在OBJ中(為了打字快點,以下Objective-C都簡稱OBJ)中,任何的數字、單個字符或者字符串,都稱為常量。例如:數字58為一個整數常量,字符串@"this is OBJ!\n"表示一個常量的字符串對象。完全又常量組成的表達式我們就稱為常量表達式。

所以,表達式:

128+7-17

是一個常量表達式,這是因為其表達式的每一項都是一個常量值。但是如果把i聲明為了整形的變量,那么表達式:

128+7-i

就不是一個常量表達式了.

下面說說關於4個數據類型的情況..

2.int類型

    在OBJ中,整數常量是又一個或多個數字的序列所組成。序列前的負號表面該值是一個負數。合法值例如:10 、-10、158. 切記數字之間不能出現空格,且大於999的值不適用逗號來表示。比如:11000是一個合法的整數常量,但11 000是一個非法的常量.

    OBJ中存在兩種特殊的格式,它們用於非十進制方式保存整數常量。第一種:如果整形值的第一位為0,那么這個整數將用八進制的方式表示,也就是說用基數8來表示。這種情況下改值的其他余位的值必須都是合法的八進制數字,即必須是0到7之間的數字。例如在OBJ八進制表示的值50,表示的方式為050,等價於十進制表示的值40.

同理,八進制的常量0177表示為十進制的值127,算法為1*64+7*8+7 =127.

可以通過在NSLog(如果不理解NSLog,暫時可以把它想象為C#的message.show()或者js的alert())中調用的格式字符串中使用格式符號%o,可在終端上用八進制顯示整型值:

例:

1 int a =177
2 NSLog(@"int is : %o\n",a);

在上面例子的情況下,輸出的八進制值不帶有前導0,輸出帶有0的寫法如下:

1  int a = 177;
2 NSLog(@"%#o",a);

第二種情況:

如果整形常量以0和字母x(x無論大寫還是小寫)開頭,那么這個值都將采用十六進制(即以16為基數)計數法里表示。緊跟在字母x后面的是十六進制的的數字,它可由0到9之間的任意數字或a到f(A到F)之間的字母組成。字母表示的數字分別為10到15。因此,給一個名為rgbColor的整型常量指派一個十六進制的值FFEF0D,可以使用以下語句:

1 rgbColor = 0xFFEF0D;


格式符號%x表示顯示一個十六進制的值,該值不會帶有前導0x,都是用a--f的小寫字母表示十六進制的數字,需要帶有前導0x,使用格式字符%#x表示:

1 NSLog(@"%#x\n",rgbColor);

不管是字符,浮點,整數,都有與其對應的值域,這個值域與存儲特定類型的值而分配到的內存量有關,一般在語言當中沒有規定這個量的大小,它依托於所運行的計算機,所以叫做設備的相關量.如一個整數可在計算機上占用32位,也可以使用64位存儲。

2.float類型:

     float類型可包含存儲小數位數的值,例如值3.、125.8以及-.0001都是合法的浮點數。顯示浮點數,可以使用NSLog(@"%f",floatType)。

     浮點常量也能使用科學計數法的方式來表示,值1.74e4就是一種科學計數法,他表示的是1.7乘以10的4次方。位於字母e前面的稱為尾數,后面的稱為指數,指數的前面可以放置正好和負號。指數表示將與尾數相乘的10的幕。因此,2.225e-3表示2.225乘以10的-3次方,值為0.00225.

3.double類型

    double類型和float類型很相似,一般使用double是在float不能滿足精度(即所提供的值域)的要求時候。double類型變量可存儲的位數大概是float的兩倍多,大多數的計算機使用64位來表示double值。注意:除非你自己聲明,否則OBJ均把所有浮點常量看都是double值,要清楚地表示float常量,一是聲明float類型,二是在數字的尾部加一個f或則F,例如:

CGSizeMake(12.5f,13f);

要顯示double類型的值,可使用%f,%e,或%g,它們顯示float值所用的格式是相同的.

4.char類型
     char類型可存儲單個的字符。將字符放入一對括號中就可以得到字符常量。因此,'a'.'3'和';'都是合法的字符常量.第一個表示字母a,第二個表示字符3,第三個表示分號。第二個並不等同於數字的3.

     字符常量'\n'(換行符)是一個合法的字符常量。因為反斜杠符號是OBJ中特殊符號。OBJ中將字符'\n'看作單個的字符,盡管它是由兩個字符組成。

    如下示例,使用了基本的數據類型:

  

 1 #import <Foundation/Foundation.h>
2
3 int main (int argc,char *argv[])
4
5 {
6
7 NSAutoreleasePool *pool =[[NSAutorelelasePool alloc]init];
8
9 int numVar =10;
10
11 float floaVar =331.79;
12
13 double doubleVar =9.44e+11;
14
15 char charVar ='W';
16
17 NSLog(@"numVar:=%i",numVar);
18
19 NSLog(@"floatVar:=%f",floatVar);
20
21 NSLog(@"doubleVar:=%e",doubleVar );
22
23 NSLog(@"doubleVar :=%g",doubleVar );
24
25 NSLog(@"charVar:=%c",charVar);
26
27 [pool drain];
28
29 return 0;
30
31 }

 

輸出:numVar =10;

       floatVar =331.790009;

       doubleVar =8.440000e+11;

       doubleVar =8.44e+11;

       charVar ='W';

注意:我們指派給floatVar的值實際上是331.79,但是為什么輸出331.790009呢?實際上,顯示的值是由特定的計算機系統決定的。在計算機內部使用特殊的方式管理數字。計算機在處理數字的時候,很可能會遇到不准確性,比如1除以3,計算出為3.3333333, 這一串的3實際只是一個近似值,理論上,應存在無數個3。然而計算機只能保存這些數字,這就是計算機的不確定性所致。此處應用了相同的不確定性,所以在內存中不能精確的表示一些浮點值!!

       

 

  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM