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。然而計算機只能保存這些數字,這就是計算機的不確定性所致。此處應用了相同的不確定性,所以在內存中不能精確的表示一些浮點值!!
