1. 程式人生 > 實用技巧 >四叔的c++入門課程(4)賦值語句與表示式

四叔的c++入門課程(4)賦值語句與表示式

上節課我們講明白了什麼是變數。
那麼這節課我們來講怎麼讓一個變數具有一個值,也就是把資料寫到特定的記憶體空間上。
賦值語句很簡單
變數 = 表示式
左邊必須是單個變數,且已經被宣告,右邊是一個能夠計算出定值的表示式
舉個栗子:

int a;
a=5+5+5;
cout<<a;
int b;
b=a+a+a;
cout<<b;

另外在表示式中可以出現左邊的變數本身。例如

int a;
a=6;
a=a*a+a;

根據我們的套娃分析,計算機會先處理右邊的等式,也就是說在右邊的等式中a是等於6的。處理完右邊的等式,得到值42,然後把42賦值給a。
這裡容易出現一個錯誤,就是使用了未初始化的變數。

int a;
a=6+a;

在套娃分析的時候右邊等式中a的值是不知道的。在某些情況下預設是0,某些情況下會是個隨機數(後續會有講解)。
另外可以宣告變數的時候就初始化

int a=777;

其實這裡我們就已經可以用計算機來處理簡單的小學數學題了。
比如寫一個程式輸入梯形的上底下底和高,輸出面積

int a,b,h;
cin>>a>>b>>h;
int s=(a+b)*h/2;
cout<<s;

這裡應該是我們的讀者第一次遇到cin,cin和cout是c++中的輸入輸出流,cin就是讓使用者輸入值,然後把值賦給對應的變數,注意>>的方向和cout是相反的。
c++的表示式基本運算子有+-*/()&|!^(加 減 乘 除 括號 與 或 非 異或)

以下內容過於複雜讀者不必細究。主要是寫給一個朋友看的。
下期預告 四叔的c++入門課(5)變數型別

與或非異或都是位運算,如果參與運算的資料是整型,就按二進位制每一位進行運算(資料在底層是以二進位制形式儲存的)
比如5(101)和6(110)
5 & 6 的話就是
1 0 1
1 1 0
——————
1 0 0 (4)

5 & 8 的話就是
0 1 0 1
1 0 0 0
———————
0 0 0 0(0)
與或異或的運算規則都參考上面就行了。右邊對齊,左邊補0,按位計算(邏輯運算結果只會是1和0所以不存在進位)

順帶一提,異或有一個特殊性質。
設a、b為兩個個二進位制整數
有 a=(a^b)^b
這可以用於加密。
前置知識(所有資訊的本質都是二進位制整數)
有明文a,密碼b,把a切成若干段,每段長度與密碼的長度接近。然後每段分別異或b,得到密文。接收方得到密文之後,用同樣的切法,把它切成若干段,然後再異或密碼,就得到了明文。

非運算就是按位非
101(5)
————
010(2)
另外還有一種位運算是位移。
有>>(右移)和<<(左移),就是把數字在二進位制上整個移動一下。如果越位了就捨去
舉個例子
101(5)
cout<<(5>>1)//右移一位)
結果是10(2)
110(6)
cout<<(6<<1)
結果是1100(12)

所以對整數來說大部分情況下,左移是*2,右移是/2

但我們考慮特殊情況
對一個32位儲存的整數,第一位是符號位。
有這樣一個數:
01100......
我們左移之後變成了
1100......0
它變成了一個負數!
對一個負數:
1......
右移之後是01......
變成了正數。
因為位運算是計算機底層的運算,a=a<<2和a=a*2,效果一樣,但後者用時是前者的幾十倍。適當使用位運算,可以讓你的程式-1s