Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式_第1頁
Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式_第2頁
Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式_第3頁
Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式_第4頁
Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式Objective-C-2.0程序設(shè)計-第4章-數(shù)據(jù)類型和表達式第第4章章 數(shù)據(jù)類型和表達式數(shù)據(jù)類型和表達式賦值運算符4.34.4算數(shù)表達式4.2數(shù)據(jù)類型和常量4.1位運算符4.5類型:_Bool、_Complex和_Imaginary4.64.1 數(shù)據(jù)類型和常量數(shù)據(jù)類型和常量 Objective-C提供4中基本數(shù)據(jù)類型:int、float、double和char。聲明為int類型的變量只能用于保存整型值,也就是沒有小數(shù)位的值。聲明為float類型的變量可存儲浮點數(shù)(即包含小數(shù)位的值)。double類型和float類型一樣,只不過

2、前者的精度約是后者精度的兩倍而已。最后,char類型可存儲單個字符,例如字符a,數(shù)字字符6或者一個分號。 在Objective-C中,任何數(shù)字,單個字符或者字符串通常都稱為常量。例如,數(shù)字58表示一個常量整數(shù)值,字符串“Programming in Objective-C is fun. n”表示一個常量字符串對象。完全由常量組成的表達式叫做常量表達式。因此,表達式 128+7-17是一個常量表達式,因為該表達式的每一項都是一個常量值。 然而,如果將i聲明為整型變量,那么表達式 128+7-i就不是一個常量表達式了。4.1.1 int類型類型 在Objective-C中,整數(shù)常量由一個或多個數(shù)

3、字的序列組成。序列前的負號表示該值是一個負數(shù)。值158、-10、0都是合法的整數(shù)常量。數(shù)字中間不允許長如空格,大于999的值不能用逗號表示(因此,值12,000是一個非法的整數(shù)常量,它必須寫成1202X)。 Objective-C中,存在兩種特殊的格式,它們用一種非十進制的方式來表示整數(shù)常量。如果整型值的第一位是0,那么這個整數(shù)將用八進制計數(shù)法來表示。在這種情況下,該值的其余位必須是合法的八進制數(shù)字,那必須是0到7之間的數(shù)字。 如果整型常量以0和字母x(無論是大寫還是小寫字母)開頭,那么這個值都將用十六進制計數(shù)法來表示。緊跟在字母x后的是十六進制值的數(shù)字,它可由0到9之間的數(shù)字和a到f(或A到

4、F)之間的字母組成。字母表示的數(shù)字分別為10到15.4.1.1 int類型類型 每個值,不管是字符,整數(shù)還是浮點數(shù),都有與其對應(yīng)的值域。這個值域與存儲特定類型的值而分配的內(nèi)存量有關(guān)。一般來說,在語言中沒有規(guī)定這個量,它通常依賴所運行的計算機,因此叫做設(shè)備或機器相關(guān)量。例如,一個整數(shù)可在計算機上占用32位,或者可以使用64位存儲。 永遠不要編寫假定數(shù)據(jù)類型大小的程序。然而,要保證為每種基本數(shù)據(jù)類型留出最小數(shù)量的內(nèi)存。例如,要保證整型值存儲在32位中。然而這一點不能保證。4.1.2 float類型類型 聲明為float類型的變量可存儲包含小數(shù)位的值。要區(qū)分浮點常量,可通過查看其是否包含小數(shù)點??梢?/p>

5、省略小數(shù)點之前的數(shù)字,也可以省略之后的數(shù)字,然而,顯然不能全部省略。值3. 、及都是合法的浮點常量。 浮點常量也能使用所謂的科學計數(shù)法。值就是使用這種計數(shù)法來表示浮點值。位于字母e前的值稱為尾數(shù),而之后的值稱為指數(shù)。指數(shù)前面可以放置正號或負號。指數(shù)表示將與尾數(shù)相乘的10的冪。用于分割尾數(shù)和指數(shù)的字母e,可大寫也可小寫。 要用科學計數(shù)法顯示值,應(yīng)該在NSLog格式字符串中指定格式字符%e。使用NSlog格式字符串%g允許NSlog確定使用常用的浮點計數(shù)法還是使用科學計數(shù)法來顯示浮點值。這一決定取決于指數(shù)的值:如果該值小于-4或大于5,采用%e(科學計數(shù)法)表示,否則采用%f(浮點計數(shù)法)。 十六

6、進制的浮點常量包含前導的0 x或0X,后面緊跟一個或多個十進制或十六進制數(shù)字,再后是p或P,最后是可以帶符號的二進制指數(shù)。4.1.3 double類型類型 類型double與類型float非常相似,而在float變量所提供的值域不能滿足要求時,就要使用double變量。聲明為double類型的變量可存儲的位數(shù)大概是float變量所存儲的兩倍多。大多數(shù)計算機用64位來存儲double變量。 除非另有說明,否則Objective-C編譯器將所有的浮點常量均看做double值。要清楚地表示float常量,需要在數(shù)字的尾部添加一個f或F。 要顯示double值,可用格式符號%f、%e或%g,它們與顯示

7、float值所用的格式符號是相同的。4.1.4 char類型類型 char變量可存儲單個字符。將字符放入一對單引號中就能得到字符常量。因此a,;和0都是合法的字符常量。第一個常量表示字母a,第二個表示分號,第三個表示字符0,它并不等同于數(shù)字0。不要把字符常量和C風格的字符串混為一談,字符常量是放在單引號中的單個字符,而字符串則是放在雙引號中的任意個數(shù)的字符。如上一章提及,前面有字符并且放在雙引號中的字符串是NSString字符串對象。 字符常量n(即換行符)是一個合法的字符常量。出現(xiàn)這種情況的原因是反斜杠符號是Objective-C系統(tǒng)中的特殊符號,實際上并不把它看成一個字符。換句話說,Obj

8、ective-C編譯器將字符n看做單個字符,盡管它實際上由兩個字符組成。其他的特殊字符由反斜杠字符開頭。4.1.4 char類型類型 代碼清單4-1中,使用了基本的Objective-C數(shù)據(jù)類型。 代碼清單4-1-#import int main (int argc, char *argv)autoreleasepoolint integerVar = 100;float floatingVar = 331.79;double doubleVar = 8.44e+11;char charVar = W;NSLog (”integerVar = %i”, integerVar);NSLog (”

9、floatingVar = %f”, floatingVar);NSLog (”doubleVar = %e”, doubleVar);NSLog (”doubleVar = %g”, doubleVar);NSLog (”charVar = %c”, charVar);return 0;4.1.4 char類型類型 代碼清單4-1 輸出:integerVar = 100doubleVar = 8.440000e+11doubleVar = 8.44e+11charVar = W 在程序輸出的第二行,指派給floatingVar的值是,實際顯示成了331.790009. 事實上,實際顯示的值是

10、由使用的特定計算機系統(tǒng)決定的。出現(xiàn)這種不準確的原因是:計算機內(nèi)部使用特殊方式表示數(shù)字。在計算機內(nèi)存中不能精確的表示一些浮點值。4.1.5 限定詞:限定詞:long、long long 如果直接把限定詞long放在int之前,那么所聲明的整型變量在某些計算機上具有擴展的值域。一個long int聲明的例子為: long int factorial; 這條語句將變量factorial聲明為long的整型變量。就像float和double變量一樣,long變量的具體進度也是有具體計算機系統(tǒng)決定的。在許多系統(tǒng)上,int與long int具有相同的值域,而且任何一個都能存儲32位寬的整型值。 long

11、int類型的常量值可通過在整型常量末尾添加字母L來形成。但數(shù)字和L之間不允許有空格。 long int numberOfPoints=131071100L;將變量numberOfPoints聲明為long int類型。 4.1.5 限定詞:限定詞:long、long long 要用NSLog顯示long int的值,使用字母l作為修飾符并放在整型格式符號i,o和x之前。這意味著格式符號%li用十進制格式顯示long int值,符號%lo用八進制顯示值,而符號%lx用十六進制格式顯示值。可如下使用long long的整型數(shù)據(jù)類型: long long int maxAllowedStorage;

12、 這條語句把將指定的變量聲明為具有特定擴展進度的變量,該擴展精度保證變量至少具有64位的寬度。NSLog字符串不使用單個字母l,而使用兩個l來顯示long long的整數(shù),例如“%lli”。 同樣可將long標識符放在double聲明之前: long double US_deficit_202X; long double常量可寫成其尾部帶有字母l或的浮點常量。 要顯示long double的值,需要使用修飾符L。因此,%Lf用浮點計數(shù)法顯示long double的值,%Le用科學計數(shù)法顯示同樣的值,而%Lg將告訴NSlog在%Lf和%Le之間任選一個。4.1.5 限定詞:限定詞:long、lo

13、ng long 把限定詞short放在int聲明之前時,它告訴Objective-C編譯器要聲明的特定變量用來存儲相當小的整數(shù)。之所以使用short變量,主要原因是對節(jié)約內(nèi)存空間的考慮。 在某些計算機上,short int占用的內(nèi)存空間是常規(guī)int變量所占空間的一半。在任何情況下,分配給short int的空間數(shù)量不少于16位。 在Objective-C中,沒有其他方法可以顯示的編寫short int型常量。要顯示short int變量,可將字母h放在任何普通的整型轉(zhuǎn)換符號之前,如%hi,%ho或%hx。4.1.5 限定詞:限定詞:long、long long 最終限定詞可放在int變量之前,

14、當整數(shù)變量只用來存儲正數(shù)的情況下使用最終限定符: unsigned int counter;向編譯器聲明:變量counter只用于保存正值。 通過將字母u(或U)放在常量之后,可產(chǎn)生unsigned int常量。 0 x00ffU 編寫整型常量時,可將字母u(或)和(或L)組合起來使用: 202X0UL告訴編譯器將常量202X0看做unsigned long。 如果整型常量之后不帶有字母u,U,l或L中的任何一個,而且它太大以至于不適合用普通大小的int表示,那么編譯器將把它看做unsigned int值。如果它太小以至于不適合用unsigned int表示,那么編譯器會把它看做long in

15、t。如果仍然不合適用long int表示,編譯器就會把它看做unsigned long int。 將變量聲明為long int,short int或unsigned int時,關(guān)鍵字int可省略。 同樣可以講char變量聲明為unsigned。不過已超出本書的討論范圍。4.1.6 id類型類型 id類型可以存儲任何類型的對象。從某種意義說,它是一般對象類型。例如,程序行 id number;將number聲明為id類型的變量,可聲明方法使其具有id類型的返回值 -(id)newObject:(int)type;這個程序行聲明了一個名為newObject的實例方法,它具有名為type的單個整型參

16、數(shù)并有id類型的返回值。 應(yīng)該注意,對返回值和參數(shù)類型聲明來說,id是默認的類型。因此,一下程序行 +allocInit;聲明了一個返回id類型值的類方法。4.1.6 id類型類型 表4-1 基本數(shù)據(jù)類型類型類型常量實例常量實例NSlog字符字符chara, n%cshort int%hi, %hx, %hounsigned short int%hu, %hx, %hoint12, -97, 0 xFFE0, 0177%i, %x, %ounsigned int12u, 100U, 0XFFu%u, %x, %olong int12L, -2001, 0 xffffL%li, %lx, %lo

17、unsigned long int12UL, 100ul, 0 xffeeUL%lu, %lx, %lolong long int0 xe5e5e5e5LL, 500ll%lli, %llx, &llounsigned long long int12ull, 0 xffeeULL%llu, %llx, %llofloat12.34f, 3.1e-5f, 0 x1.5p10, 0 x1P-1%f, %e, %g, %adouble12.34, 3.1e-5, 0 x.1p3%f, %e, %g, %along double12.341, 3.1e-5l%Lf, $Le, %Lgidnil

18、%p第第4章章 數(shù)據(jù)類型和表達式數(shù)據(jù)類型和表達式賦值運算符4.3計算器類4.4數(shù)據(jù)類型和常量4.1位運算符4.5類型:_Bool、_Complex和_Imaginary4.6算術(shù)表達式4.24.2.1 運算符的優(yōu)先級運算符的優(yōu)先級 Objective-C中的每一個運算符都有與之相關(guān)的優(yōu)先級。該優(yōu)先級用于確定擁有多個運算符的表達式如何求值:優(yōu)先級較高的運算符首先求值。如果表達式包含優(yōu)先級相同的運算符,可按照從左到右或從右到左的方向來求值,具體按照哪個方向求值取決于運算符。 代碼清單4-2說明了加法,減法,乘法和除法運算,在程序中執(zhí)行的最后兩個運算引入了一個運算符比另一個運算符有更高的優(yōu)先級的概念

19、。4.2.1 運算符的優(yōu)先級運算符的優(yōu)先級 代碼清單4-2-/ Illustrate the use of various arithmetic operators#import int main (int argc, char *argv)autoreleasepoolint a = 100;int b = 2;int c = 25;int d = 4;int result;result = a - b; /subtractionNSLog (”a - b = %i”, result);result = b * c; /multiplicationNSLog (”b * c = %i”, r

20、esult);result = a / c; /divisionNSLog (”a / c = %i”, result);result = a + b * c; /precedenceNSLog (”a + b * c = %i”, result);NSLog (”a * b + c * d = %i”, a * b + c * d);return 0;對NSLog指定表達式作為參數(shù)時,無需將該表達式的結(jié)果先指派給一個變量。4.2.1 運算符的優(yōu)先級運算符的優(yōu)先級 代碼清單4-2 輸出a - b = 98b * c = 50a / c = 4a + b * c = 150a * b + c *

21、 d = 300 表達式: a+b*c不會嘗試結(jié)果2550(102*25);相反,相應(yīng)的NSLog語句顯示的結(jié)果為150.這是因為Objective-C與其他大多數(shù)程序設(shè)計語言一樣,對于表達式中多重運算或項的順序有自己的規(guī)則。因此,Objective-C認為表達式a+b*c等價于a+(b*c)。 如果要改變表達式中項的計算順序,可使用圓括號。表達式 (a+b)*c的值將是2550。圓括號也是可以嵌套的,在這種情況下,表達式的計算要從最里面的一對圓括號一次向外。只要確保結(jié)束括號與開始括號數(shù)目相等即可。4.2.2 整數(shù)運算和一元負號運算符整數(shù)運算和一元負號運算符 代碼清單4-3引入了整數(shù)運算的概念

22、。 代碼清單4-3-/ More arithmetic expressions#import int main (int argc, char *argv)autoreleasepoolint a = 25;int b = 2;int result;float c = 25.0;float d = 2.0;NSLog (”6 + a / 5 * b = %i”, 6 + a / 5 * b);NSLog (”a / b * b = %i”, a / b * b);NSLog (”c / d * d = %f”, c / d * d);NSLog (”-a = %i”, -a);return 0

23、;6 + a / 5 * b = 16a / b * b = 24-a = -254.2.2 整數(shù)運算和一元負號運算符整數(shù)運算和一元負號運算符 迄今出現(xiàn)的每個程序中,每個運算符前后都有空格。這種做法不是必須的,僅僅是出于美觀上的考慮。一般來說,在允許單個空格的任何位置都可以插入額外的空格。如果能使程序更容易閱讀,敲擊空格的做做是值得的。 在代碼清單4-3中,第一個NSLog調(diào)用中的表達式鞏固了運算符優(yōu)先級的概念。 NSLog (”6 + a / 5 * b = %i”, 6 + a / 5 * b); 在第二條NSLog語句引入了一個新誤區(qū)。在輸出中顯示的24,而不是25.那是因為這個表達式采

24、用整數(shù)運算來求值。 NSLog (”a / b * b = %i”, a / b * b); 變量a和b的聲明都是int類型的。當包含兩個整數(shù)表達式求值時,Objective-C系統(tǒng)都將使用整數(shù)運算來執(zhí)行這個操作。在這種情況下,數(shù)字的所有小數(shù)部分將丟失。因此,計算a除以b時,得到的中間結(jié)果是12而不是期望的12.5.這個中間結(jié)果乘以2就是最終結(jié)果24. 在第三條NSLog語句中,如果用浮點值來替代整數(shù)來執(zhí)行相同的運算就會獲得期望的結(jié)果。4.2.2 整數(shù)運算和一元負號運算符整數(shù)運算和一元負號運算符 決定使用float變化還是int變量應(yīng)該基于變量的使用目的。如果無需任何小數(shù)位,可用整型變量。這將

25、使程序更加高效的執(zhí)行。另一方面,如果需要精確到小數(shù)位,那么選擇應(yīng)該很清楚。唯一必須回答的問題是使用float還是double。這取決為使用數(shù)據(jù)所需要的精度和他們的量級。 在最后一條NSLog語句中,使用了一元負號運算符對變量的值求反。這個一元運算符用于單個值的運算符,而二元運算符作用于兩個值。負號實際上扮演了一個雙重角色,作為二元運算符,它執(zhí)行兩個數(shù)相減的操作;作為一元運算符,它對一個值求反。 與其他運算符相比,一元負號運算符具有更高的優(yōu)先級。因此,表達式 c=-a*b將執(zhí)行-a乘以b。4.2.3 模運算符模運算符 模運算符由百分號(%)表示,它的功能是第一個值除以第二個值所得的余數(shù)。 代碼清

26、單4-4-/ The modulus operator#import int main (int argc, char *argv)autoreleasepoolint a = 25, b = 5, c = 10, d = 7;NSLog (”a % b = %i”, a % b);NSLog (”a % c = %i”, a % c);NSLog (”a % d = %i”, a % d);NSLog (”a / d * d + a % d = %i”, a / d * d + a % d);return 0;a % b = 0a % c = 5a % d = 4a / d * d + a

27、% d = 254.2.3 模運算符模運算符 在前面,NSLog使用百分號之后的字符來確定如何輸出下一個參數(shù)。然而,如果它后面緊跟另一個百分號,那么NSLog例程認為你其實想顯示百分號,并在程序輸出的適當位置插入一個百分號。 在第一條NSLog語句中,25除以5所得的余數(shù)是0,所以顯示的求模的結(jié)果是0。 在第二條NSLog語句中,25除以10所得的余數(shù)是5,所以顯示的求模的結(jié)果是5。 Objective-C使用整數(shù)運算來執(zhí)行來個整數(shù)間的任何運算。因此兩個整數(shù)相除所產(chǎn)生的任何余數(shù)將被完全丟棄。一般來說,表達式: a/b*b+a%b的值始終與a相等(假定a和b的值都是整數(shù))。事實上,定義的模運算只

28、用于處理整數(shù)。 就優(yōu)先級而言,模運算的優(yōu)先級與乘法和除法的優(yōu)先級相等。4.2.4 整型值和浮點值的相互轉(zhuǎn)換整型值和浮點值的相互轉(zhuǎn)換 代碼清單4-5-/ Basic conversions in Objective-C#import int main (int argc, char *argv)autoreleasepoolfloat f1 = 123.125, f2;int i1, i2 = -150;i1 = f1; / floating to integer conversionNSLog (”%f assigned to an int produces %i”, f1, i1);f1 =

29、 i2; / integer to floating conversionNSLog (”%i assigned to a float produces %f”, i2, f1);f1 = i2 / 100; / integer divided by integerNSLog (”%i divided by 100 produces %f”, i2, f1);f2 = i2 / 100.0; / integer divided by a floatNSLog (”%i divided by 100.0 produces %f”, i2, f2);f2 = (float) i2 / 100; /

30、 type cast operatorNSLog (”(float) %i divided by 100 produces %f”, i2, f2);return 0;4.2.4 整型值和浮點值的相互轉(zhuǎn)換整型值和浮點值的相互轉(zhuǎn)換 在Objective-C中,只要將浮點值賦值給整型變量,數(shù)字的小數(shù)部分都會被刪節(jié)。因此, i1 = f1; / floating to integer conversionNSLog (”%f assigned to an int produces %i”, f1, i1); 把f1賦值給i1時,數(shù)字將被刪節(jié)。輸出結(jié)果為 123.125000 assigned to

31、an int produces 123只有整數(shù)部分被儲存到i1中。 將整型變量指派給浮點變量的操作不會引起數(shù)字值的任何變化,該值僅由系統(tǒng)轉(zhuǎn)換并存儲到浮點變量中。 f1 = i2; / integer to floating conversionNSLog (”%i assigned to a float produces %f”, i2, f1);把i1的值賦給f1時,輸出結(jié)果為: 4.2.4 整型值和浮點值的相互轉(zhuǎn)換整型值和浮點值的相互轉(zhuǎn)換 在程序代碼 f1 = i2 / 100; / integer divided by integerNSLog (”%i divided by 100 p

32、roduces %f”, i2, f1);中,除法運算的兩個運算數(shù)都是整數(shù),因此除法運算的中間結(jié)果是整型,而將整型的值賦值給f1,即是將整型轉(zhuǎn)換為浮點值的運算。所以結(jié)果為: 在代碼清單4-5的最后兩個算法中,涉及到整數(shù)與浮點值的相除。在Objective-C中,任何處理兩個值的運算如果其中一個值是浮點變量或浮點常量,那么這一運算將作為浮點運算來處理。所以最后兩個算法的結(jié)果是相同的: 4.2.5 類型專函運算符類型專函運算符 在聲明和定義方法是,將類型放入圓括號中來聲明返回值和參數(shù)的類型。在表達式中,將類型放在圓括號中,表示類型轉(zhuǎn)換。 代碼清單4-5中的最后一個運算: f2=(float)i2

33、/ 100中的放入圓括號中float就是一個類型轉(zhuǎn)換。 為了求表達式的值,類型轉(zhuǎn)換運算符將變量i2的值轉(zhuǎn)換為浮點數(shù)。該運算符不會影響變量i2的值;它是一個一元運算符。(float)i2的值是浮點值,但i2 的值還是整數(shù),類型轉(zhuǎn)換運算符并沒有改變變量本身的值,它相當于一個中間變量。 類型轉(zhuǎn)換運算符比所有算數(shù)運算符的優(yōu)先級都高,但一元減號和一元加號運算符除外。4.2.5 類型專函運算符類型專函運算符表達式 (int)29.55 + (int)在Objective-C中等價于29+21。因為將浮點值轉(zhuǎn)換為整數(shù)的后果就是舍棄其中的浮點值。表達式 (float)6 / (float)4得到的結(jié)果為,與表

34、達式 (float)6 / 4的結(jié)果相同。類型轉(zhuǎn)換運算符通常用于將一般id類型的對象轉(zhuǎn)換為特定類的對象: id myNumber; Fraction *myFraction; . myFraction = (Fraction *) myNumber;將id變量myNumber的值轉(zhuǎn)換成一個Fraction對象。第第4章章 數(shù)據(jù)類型和表達式數(shù)據(jù)類型和表達式算數(shù)表達式4.2計算器類4.4數(shù)據(jù)類型和常量4.1位運算符4.5類型:_Bool、_Complex和_Imaginary4.6賦值運算符4.34.3 賦值運算符賦值運算符 Objective-C語言允許使用以下一般格式將算術(shù)運算符和賦值運算符合

35、并到一起: op=在這個格式中,op是任何算術(shù)運算符,包括+、-、*、/、%。此外,op還可以是任何用于移位和屏蔽操作的位運算符。 考慮下面語句: count+=10; 通常所說的“加號等號”運算符(+=),將運算符右側(cè)的表達式和左側(cè)的表達式相加,再將結(jié)果保存到運算符左邊的變量中。因此,上面的語句與下面的語句等價: count=count+10; 考慮下面語句: a /=b+c 無論等號右側(cè)出現(xiàn)什么樣的表達式,都將右側(cè)表達式的結(jié)果算出來后,再用a除。因為等號的優(yōu)先級比加號要低。事實上,除逗號運算符外的運算符都比賦值運算符的優(yōu)先級高。因此,上面的語句等價于: a=a/(b+c)4.3 賦值運算符

36、賦值運算符 使用賦值運算符的動機有3個:首先,程序語句更容易書寫,因為運算符左側(cè)的部分沒有必要在右側(cè)重寫。其次,結(jié)果表達式通常容易閱讀。再次,這些運算符的使用可使程序的運行速度更快,因為編譯器有時在計算表達式時能夠產(chǎn)生更少的代碼。第第4章章 數(shù)據(jù)類型和表達式數(shù)據(jù)類型和表達式算數(shù)表達式4.2數(shù)據(jù)類型和常量4.1位運算符4.5類型:_Bool、_Complex和_Imaginary4.6計算器類4.4賦值運算符4.34.4 計算計算器類器類 現(xiàn)在定義一個新類。創(chuàng)建一個Calculator類,它是一個簡單的四則運算計算器,可用來進行加,減,乘,除運算。類似于常見的計算器,這種計算器必須能夠記錄累加的

37、結(jié)果,獲知通常所說的累加器。因此,方法必須能夠執(zhí)行以下操作:將累加器設(shè)置為特定值,將其清空(或設(shè)置為0),以及在完成時檢索它的值。 代碼清單4-6定義這個新類。4.4 計算計算器類器類 代碼清單4-6-/ Implement a Calculator class#import interface Calculator: NSObject double accumulator;/ accumulator methods-(void) setAccumulator: (double) value;-(void) clear;-(double) accumulator;/ arithmetic me

38、thods-(void) add: (double) value;-(void) subtract: (double) value;-(void) multiply: (double) value;-(void) divide: (double) value;end4.4 計算計算器類器類implementation Calculator-(void) setAccumulator: (double) valueaccumulator = value;-(void) clearaccumulator = 0;-(double) accumulatorreturn accumulator;-(v

39、oid) add: (double) valueaccumulator += value;-(void) subtract: (double) valueaccumulator -= value;-(void) multiply: (double) valueaccumulator *= value;-(void) divide: (double) valueaccumulator /= value;end4.4 計算機類計算機類 int main (int argc, char *argv)autoreleasepoolCalculator *deskCalc;deskCalc = Calc

40、ulator alloc init;deskCalc clear;deskCalc setAccumulator: 100.0;deskCalc add: 200.;deskCalc divide: 15.0;deskCalc subtract: 10.0;deskCalc multiply: 5;NSLog (”The result is %g”, deskCalc accumulator);return 0;輸出:The result is 504.4 計算機類計算機類 Calculator類只有一個實例變量,以及一個用于保存累加器值的double變量。方法定義的本事非常直觀。 注意調(diào)用m

41、ultiple方法的消息: deskCalc multiply: 5; 該方法的參數(shù)是一個整數(shù),而它期望的參數(shù)卻是double類型。因為方法的數(shù)值參數(shù)會自動轉(zhuǎn)換以匹配期望的類型,所以不會出現(xiàn)任何問題。因此調(diào)用該函數(shù)時,整數(shù)5將自動轉(zhuǎn)換成雙精度浮點值。 即使自動轉(zhuǎn)換過程會自己進行,然而在調(diào)用時提供正確的參數(shù)類型仍是一個較好的程序設(shè)計習慣。 第第4章章 數(shù)據(jù)類型和表達式數(shù)據(jù)類型和表達式算數(shù)表達式4.2數(shù)據(jù)類型和常量4.1計算器類4.4類型:_Bool、_Complex和_Imaginary4.6賦值運算符4.3位運算符4.54.5 位運算符位運算符 Objective-C語言中有各種各樣的運算符可

42、處理數(shù)字中的特定位。 表4-2 位運算符 符號符號運算運算&按位與|按位或按位異或一次求反向右位移表4-2中列出的所有運算符,除一次求反運算外,都是二元運算符。位運算符可以處理任何類型的整型值,但不能處理浮點值。4.5.1 按位與運算符按位與運算符 對兩個值執(zhí)行與運算時,會逐位比較兩個值的二進制表示。第一個值與第二個值對應(yīng)位都為1時,在結(jié)果的對應(yīng)位上就是1,否則為0. 按位與的真值表 b1b2b1 & b20000101001114.5.1 按位與運算符按位與運算符 如果w1和w2都定義為short int,w1等于十六進制的15,w2等于十六進制的0c,那么以下C語句會將值0

43、 x04指派給w3: w3=w1&w2; 將w1和w2都表示為二進制后可更清楚地看到此過程:w1 0000 0000 0001 0101 0 x15w2 0000 0000 0000 1100 & 0 x0c-w3 0000 0000 0000 0100 0 x04 按位與運算經(jīng)常用于屏蔽運算。語句:w3=w1&3;它的作用是只保留w1二進制表示的最左邊的兩位,并賦值給w3. 與Objective-C中使用的所有二元運算符相同,通過添加等號,二元運算符可同樣用作賦值運算符: word &=15;4.5.2 按位或運算符按位或運算符 在Objective-C中對兩

44、個值執(zhí)行按位或運算時,會逐位比較兩個值的二進制表示。只要第一個值或者第二個值的相應(yīng)為是1,那么結(jié)果位的對應(yīng)位就是1。 按位或的真值表b1b2b1|b20000111011114.5.2 按位或運算符按位或運算符 如果w1是short int,等于十六進制的19,w2也是short int,等于十六進制的6a,那么對w1和w2執(zhí)行按位或會得到十六進制的7b:w1 0000 0000 0001 1001 0 x19w2 0000 0000 0110 1010 | 0 x6a-w30000 0000 0111 1011 0 x7b 按位或操作通常稱為按位OR,用于將某個詞的特定為設(shè)置為1。例如:w1

45、 = w1 | 07;將w1最右邊的三位設(shè)為1,其它位不變。 當然可以在語句中使用特殊的賦值運算符: w1 |= 07;4.5.3 按位異或運算符按位異或運算符 按位異或運算符,通常稱為XOR運算符,遵守以下規(guī)則:對于兩個運算數(shù)的相應(yīng)位,如果兩個值相同,那么結(jié)果的對應(yīng)位是0,如果兩個對應(yīng)位的值不相同,那么結(jié)果的對應(yīng)位是1。 按位異或的真值表b1b2b1 b20000111011104.5.3 按位異或運算符按位異或運算符 如果w1和w2分別等于十六進制的5e和d6,那么w1和w2執(zhí)行異或運算后的結(jié)果是十六進制的e8:w1 0000 0000 0101 1110 0 x5ew2 0000 000

46、0 1011 0110 0 xd6-0000 0000 1110 1000 0 xe84.5.4 一次求反運算符一次求反運算符 一次求反運算符是一元運算符,它的作用僅是對運算數(shù)的位“翻轉(zhuǎn)”。將運算數(shù)的每個是1的位翻轉(zhuǎn)為0,是0的位翻轉(zhuǎn)為1. 一次求反的真值表b1b101104.5.4 一次求反運算符一次求反運算符 如果w1是short int,16位長,等于十六進制的a52f,那么對該值執(zhí)行一次求反運算會得到十六進制的5ab0:w1 1010 0101 0010 1111 0 xa52fw1 0101 1010 1101 0000 0 x5ab0 如果不知道運算中數(shù)值的準確位大小,那么一次求反運算非常有用。例如,要將類型為int的w1的最低位設(shè)置為0,可將

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論