萬事開頭難。
進制轉換
什么是進制?
生活中處處存在著進制,如:六十分鐘是一小時,六十秒是一分鐘。這是六十進制;七天是一周,這是七進制;生活中最常用的是十進制。進制就是進位機制,滿幾進一,就是幾進制。
計算機中常用的進制?
在生活中,我們最常用的是十進制,但是在計算機的中,最常使用的是二進制。因為計算機的內存我們可以看成一堆開關,開關只有兩種狀態:開啟和關閉。所以內存中的一個存儲空間只能表示兩位數:0和1。使用0和1表示數字,就是二進制,滿二進一。出了二進制,還有八進制、十六進制。
二進制表示:0、1;
八進制表示:0、1、2、3、4、5、6、7;在八進制最前邊使用0標注,如:023
十進制表示:0、1、2、3、4、5、6、7、8、9;
十六進制表示:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;在十六進制數的最前邊使用0x標注,如:0x122;
比較不同進制數之間的大小?
既然有那么多類型的進制,如果比較不同進制數的大小呢?我們可以先將進制轉換為相同進制下的數,這樣在同一進制中,就可以很方便的比較數字的大小了。
其他進制轉十進制
按權求和。
先來認識幾個概念:
位數:從右到左,從零開始數,最低位是0位,向左依次加一位。如:二進制的數:10001,最低位是第0位,最高位是第4位。
權:也就是位數,當前數字的位數是幾,權就是幾。
基數:也就是進制,進制是幾,基數就是幾。
按權求和就是將一個非十進制的數各個位上的數乘以基數的位數(權)次方。
如:二進制的1101轉換為十進制數就是:
1*2^3 + 1*2^2 + 0*2^1 + 1*2^1 = 13
十進制轉其他進制
連除倒取余。
將十進制的數用短除法,將要轉換的目標進制數當做除數,獲取到余數,直到商位零,然后從后向前取余數,得到的結果就是目標進制對應的數。如:將十進制的6轉換為而禁止的數:
2|6
2|3……0
2|1……1
0……1
最后從后向前取余數,得到110,就是十進制數6所對應的二進制。
程序的一般形式
了解最簡單的程序
我們新建一個工程,打開main.m
文件,看到的那些代碼是系統為我們自動生成的,這就是一個最簡單的程序,程序的入口是main函數,出口也是main函數,意味著程序從main
函數開始執行,當main
函數執行完畢,程序也結束運行。系統默認給我們創建的程序實現了打印hello,world!
功能,按下command+R
鍵運行程序,貫徹控制臺給我們打印的結果。如圖:
運行結果如下:
注釋
//
// main.m
// Demo
//
// Created by 全政 on 15/9/25.
// Copyright (c) 2015年 quanzheng.com. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
上邊的代碼中,我們可以看到代碼最開始的位置有兩個//
后邊加一些描述性的文字。這是什么呢?這些并不是代碼,而是代碼的注釋。就像古詩詞需要注釋一樣,我們的程序也需要注釋,在關鍵代碼加上注釋,用文字描述這段代碼的含義,可以大大提高程序的可讀性。使用//
可以寫一行注釋,不能換行,如果一次性需要寫多行注釋怎么辦?我們可以使用/*注釋內容*/
來寫,在兩個星號之間的文字可以隨便換行,只要是在兩個星號之間的東西,都是注釋。注釋不會被編譯器編譯執行,所以寫注釋不會干擾到代碼的正常執行。
/* 多行注釋
第二行
第三行
*/
基本數據類型
在講解基本數據類型之前,先思考一個問題:計算機如何來存儲一個學生的信息(姓名、年齡、入學測試成績、學號)?計算機存儲這些信息的時候,并不像我們生活中將這些信息寫在紙上就算存儲完成了,而是使用不同的數據類型來存放不同類型的數據。如:年齡是一個整數,則計算進會找一個整型類型來存放整數,成績是小數,計算機會找一個小數類型來存放小數。
我們來看看常用的基本數據類型有哪些:
數據類型 | 類型修飾符 | 內存占用量(字節數) |
---|---|---|
整型 | int |
4字節 |
長整形 | long |
32位操作系統占4字節,64位操作系統占8字節 |
浮點類型 | float |
4字節 |
雙精度浮點型 | double |
8字節 |
字符型 | char |
1字節 |
不同的數據類型所占用的字節數是不同的,1字節=8位,1位能表示兩個二進制數,所以在無符號的情況下,最小能表示的數字是全零,最大表示的數字就是全一下的二進制數。
我們使用int
,long
類型來存放整數,float
,double
類型來存放小數,char
類型來存放字符
常量、變量、運算符
常量
常量:在程序運行過程中,值不能發生改變的量。使用const
來修飾常量,如:
const int a = 12;
如果修改a的值,編譯器會報錯,常量的值無法修改。常量可以分為整型常量,如:12
,浮點型常量,如:12.21
,字符型常量可以細分為兩類,一類是ASSIC碼表上的字符,如a
,另一類是轉義字符,不能打印出來,但是有特殊含義,如:回車換行字符:\n
等。
變量
變量的含義
在程序中,變量的值是可以被修改的。變量的本質是一個容器,根據變量的數據類型,在內存中開辟對應字節數的內存空間來存放變量的值。變量區分不同的類型,不同類型的變量存放不同類型的數據。整型變量只能用來存放整數,浮點型變量只能存放小數,字符型變量只能存放字符。
如何定義一個變量
變量由3部分構成:類型修飾符、變量名、初始值。
- 變量名可以由是數字、字母、下劃線構成,但是不能以數字開頭。
- 變量名不能和系統關鍵字重復。(定義一個叫做int的變量,看看結果)
- 不能使用重復的變量名。(連續定義兩個相同的變量,看看報錯信息。家里有好幾個盆子,每個盆子的名字是不一樣的:洗臉盆、洗腳盆、洗菜盆。如果盆子名稱一樣的話,那就有可能用洗腳盆去洗菜了。多恐怖)
- 規范起見,變量名必須見名知意。(分別比較a和stuAge這兩個變量名,看哪個變量名稱更好)
- 代碼規范:空格的使用,代碼對齊
// 定義一個整形變量,變量名是a,初始值是10
int a = 10;
// 定義一個浮點型變量,變量名是b,初始值是10.01
float b = 10.01;
// 定義一個字符型變量,變量名是c,初始值是‘z’
char c = 'z';
運算符
賦值運算符
在程序中,我們使用賦值運算符給變量賦值,用=
表示賦值運算符。注意和表示判斷的==
區分開。兩個短等號表示左右兩邊的關系判斷是否相等,一個短等號表示賦值,將賦值號右邊的值賦給左邊的變量。
算數運算符
在程序中,算數運算符和我們數學中使用的算術運算符沒什么區別,都有加:+
、減-
、乘*
、除/
、求余(模運算)%
這四種。需要注意的是:在程序中,兩個運算符左右兩邊的數的數據類型一定要一致,如果使用一個整形數加或者減、乘、除一個浮點型數,可能會導致計算結果不準確,另外,使用整型數5除以整型數2,得到的結果應該是2.5,但是程序輸出的是2,兩個整型數相除,得到結果也是整型數。還有一種運算比較特殊,是求余運算,也成為模運算,符號是%
,如:5%2
得到的結果是他們的余數5,取余運算符的兩側必須是整數,不能是小數。
根據運算符所需要的參數個數,我們可以將運算符號分成單目運算符(只需要一個參數:自增、自減運算符),雙目運算符(需要兩個參數:算術運算符),三目運算符(需要三個參數:條件運算符)。
自增、自減運算符
自增運算符:++
。
我們想讓整型變量a
加一,該怎么做呢?可以使用a+1
,也可以使用自增運算符:a++
。注意,在這里a++
和++a
是有區別的。a++
表示的意思是:先取出a的值,在將a加一。例如b = a++
等價于:
b = a;
a = a + 1;
而++a
的意思是:先將a的值加一,再用加完后的a參與其他運算。例如:b = ++a
等價于:
a = a + 1;
b = a;
復合運算符
復合運算符相當于將算術運算符和賦值運算符寫在一起,減少代碼量。b = b + a
使用復合運算符表示就是b += a
;同理,b = b - a
使用復合運算符表示就是b -= a
;b = b * a
使用復合運算符表示就是b *= a
;b = b / a
使用復合運算符表示就是b /= a
;b = b % a
使用復合運算符表示就是b %= a
。
表達式、語句
表達式:常量、變量、運算符的組合就是表達式,可以是兩兩結合、也可以是三個同時結合。如a = a + 1
語句:語句就是表達式的最后加上分號。如:a = a + 1;
語句是程序執行的最小單位,只有一個完整的語句才能被執行,值寫一個表達式是不能執行得到結果的。
輸入、輸出函數
輸入、輸出函數是我們在程序中最常使用的兩個系統函數,他們提供了向程序輸入內容和輸出程序執行結果的功能。
輸出函數
當我們想輸出程序執行的結果該怎么辦呢?我們可以使用輸出函數來輸出程序執行的結果。printf()
就是C語言提供的輸出函數,如:我想輸出一句話,可以這樣寫
printf("hello,world!");
這樣,運行代碼后就能在控制臺打印hello,world!
這句話了,printf
函數主要功能就是原樣輸出雙引號中的內容。如果我們想輸出一個固定的字符串可以將要輸出的內容放在雙引號中就可以了,但是我想輸出c = 12 + 3
的運算結果怎么辦?我們可以使用占位符來代替c的位置,如:
c = 12 + 3;
printf("c = %d", c);
運行代碼后,我們就能在控制臺中看到打印的結果了:c = 15
。注意,原來在%d
的位置被15
所取代,這個15
是什么呢?就是c的值。當我們想要輸出一個變量的值時,可以根據這個變量的類型選擇不同的占位符,并且要在雙引號后邊添加上這個占位符對應的變量,也就是參數,使用逗號分隔開輸出的字符和參數。
變量類型 | 占位符 |
---|---|
整型 | %d |
浮點型 | %f |
字符型 | %c |
長整型 | %ld |
雙精度浮點型 | %lf |
輸入函數
我們想在程序運行時輸入一個參數,該怎么辦呢?這時我們就可以使用輸入函數scanf()
來輸入。