{大赦客之參}

失蹤

2

算數運算

3

邏輯運算

5

條件判斷

4

位元運算

{關係&賦值運算子}

運算子

  •  = 賦值運算子 上禮拜講過了
    • int a=10; //把10存入a這個變數中

 

  • 關係運算子
    • ==   比較兩邊是否相等
    • !=    比較兩邊是否不相等
    • >     大於
    • >=   大於等於
    • <     小於
    • <=   小於等於
#include <bits/stdc++.h>
using namespace std;

int main(){
  if(5>3){
    cout<<1;
  }
  if(5<=5){
    cout<<2;
  }
  if(7==9){
    cout<<3;
  }
  if(8!=9){
    cout<<4;
  }
}
# PRESENTING CODE

運算子

result:

這邊順便推個vim

{算數運算子}

算數運算子

就你知道的那些唄

  • + 就是那個
  • -  就是那個
  • *  就是那個
  • /  就是那個
  • % mod 取餘數
    • 5%3==2
    • 13%5==3
#include <bits/stdc++.h>
using namespace std;

int main(){
    int a_score=13;
    int b_score=10;
    cout<<a+b; //23
    cout<<a-b; //3;
    cout<<a*b; //130
    cout<<a/b; //1
    cout<<a%b; //3
}

COMBO

在運算完之後順便賦值

  • +=
  • -=
  • *=
  • /=
  • %=

怎麼用?

  • a+=b;    ==    a=a+b;
  • a*=b;     ==    a=a*b;
#include <bits/stdc++.h>
using namespace std;

int main(){
    int a_score=13;
    int b_score=10;
    a+=b;
    cout<<a; //23;
    a%=4;
    cout<<a; //3;
}

工程師很懶

  • ++ 把一個數字加一 就這麼簡單
  • --   把一個數字減一 就這麼簡單
  • ** 並沒有這種東西 也不是次方
    • 次方要用pow(a, b) == \(a^b\)
#include <bits/stdc++.h>
using namespace std;

int main(){
    int a=3;
    cout<<a++; //3
    cout<<a++; //4
    cout<<a;   //5
}

{邏輯運算子}

邏輯運算子

就你知道的那些唄

  • and   &&   且
    • 兩邊都是true則回傳true 否則回傳false
    • true && false == false
  • or      ||      或 
    • 兩邊有一個是true則回傳true 否則回傳false
    • true || false == false
  • not    !       反
    • true變false
    • false變true
    • 話說c++ 的true false是小寫的喔

邏輯運算子

#include <bits/stdc++.h>
using namespace std;

int main(){
  if(true&&false){
    cout<<1;
  }
  if(true||false){
    cout<<2;
  }
  if(!false){
    cout<<3;
  }
}

{位元運算子}

有點難 也比較少用

程式怎麼存數字?

  • 二進位制
  • 每個位數只有0和1
  • 第 i 位數代表\( 2^{i-1} \)
value 128 64 32 16 8 4 2 1
0 0 0 0 0 0 0 0 0
93 0 1 0 1 1 1 0 1
255 1 1 1 1 1 1 1 1
  • \( 93_{(10)}=01011101_{(2)}\)
  • 這就是一個八位元的數字 能夠儲存0-255的所有數字
  • 上禮拜說過int有範圍就是因為int是個32位元的數字

位元邏輯運算?

  • 如果你好奇為甚麼剛剛的"或"要用兩個"||"
  • 因為 \(|\) 被"位元或"(bitwise or) 佔走了
  • 所以甚麼是位元或?
  • 對兩個數的每個位元進行一次或運算
value 128 64 32 16 8 4 2 1
178↓ 1 0 1 1 0 0 1 0
bitwise or 1 1 1 1 0 1 1 0
84  ↑ 0 1 0 1 0 1 0 0
  • \(10110010_{(2)} | 01010100_{(2)}=11110110_{(2)}=246_{(10)}\)

位元算術運算?

  • >> n 位元右移運算子
    • 將一數字所有位元右移n格
    • aka 除 \(2^n\)
  • << n 位元左移運算子
    • 將一數字所有位元左移n格
    • aka 乘 \(2^n\)
  • 不是 cin cout 的那個喔 雖然長一樣

位元運算表

英文 符號 範例 結果
位元或 bitwise or | 6 | 11 15
位元和 bitwise and & 6 & 11 2
位元互斥或 bitwise xor ^ 6 ^ 11 13
左移運算 left shift << 5 << 3 40
右移運算 right shift >> 1243 >> 3 155

{條件判斷}

條件判斷

在不同的條件下 執行不同的程式碼

if(判斷式1){
    //do something
}else if(判斷式2){
    //do something2
}else{
    //do something3
}

如果 \(判斷式1\) 為true 

    則 \(do\, something\)

否則 如果 \(判斷式2\) 為true

    則\(do something2\)

否則 

    \(do something3\)

直接看扣

條件判斷

為甚麼最後還要一個else?

 

因為a有可能等於b喔 而前兩個判斷都不會包含到這個情況

#include <bits/stdc++.h>
using namespace std;

int main(){
    int a_score=10;
    int b_score=13;
    if(a>b){
        cout<<"a贏了";
    }else if(b>a){
        cout<<"b贏了":
    }else{
        cout<<"為甚麼會要else?"
    }
}

今天放學有演算法小社課

有興趣的可以在5:30到這間電教喔

佑佑要講喔 敬請期待 雖然他的簡報在燒

題目練習

http://iscoj.fg.tp.edu.tw 寫喔

上面的連結是可以點的

或是google直接打iscoj也有

{神奇補充}

我沒有要講 有興趣可以自己看

bitwise xor

是 ^ 這個符號喔 在shift+6

xor 中文名為 位元互斥或 (這運算子只有位元版的

  • 0 ^ 0 == 0
  • 1 ^ 0 == 1
  • 1 ^ 1 == 0
    • 這裡不一樣喔 雖然有個或字 但兩邊都true就會變成false

有什麼用?

  • ㄜ打競程會遇到
  • 有個神奇的性質 對同個數字xor兩次 會變回原本的數字
  • 所以就可以用這個性質作點簡單的加密

三元運算子

為什麼要三元運算子呢

  • 還是同個原因 工程師很懶 想要把if else 壓到一行解決

蛤?

 

boolean? do_sth_1 : do_sth_2;
if(boolean){
    do_sth_1;
}else{
    do_sth_2;
}

展開來就是

 

Made with Slides.com