iT邦幫忙

0

【C++學習筆記】04《邏輯運算與運算子》

  • 分享至 

  • xImage
  •  

【C++學習筆記】03《你的變數不是你的變數》


在 C++ 中,邏輯運算子(Logical Operators) 主要用來處理條件判斷,邏輯運算在執行時會伴隨隱性轉型與短路求值(Short-circuit Evaluation),若不了解其運作方式,容易在條件判斷中產生非預期結果。看似簡單,但其實藏了不少容易忽略或常忘的細節。

一、bool與隱性轉型(Implicit Conversion)
在 C++ 中,bool 可以自動轉換成整數型別:

true  -> 1
false -> 0

因此以下程式碼是合法的:

int a = true + true;   // a = 2
int b = false + 5;    // b = 5

這種轉換稱為隱性轉型,由編譯器根據「運算子與型別」自動決定。
📌 注意:
◆bool → int是允許的
◆反過來int → bool則是0為false,非0為true

二、邏輯運算子(Logical Operators)
C++ 提供三種基本邏輯運算子:

&&  // AND
||  // OR
!   // NOT

使用範例:

int a = 0;
int b = 1;
    
if(a == 0 && b == 1)
{
    cout << "true" << endl;//print "true"
}
if(a == 0 || b == 0)
{
    cout << "true";//print "true"
}

! 只需要一個運算元,用來反轉布林結果:

!(3 > 2)   // false
等同於
not (3 > 2)
int a = 0;
int b = 1;
    
if(!(a > b))
{
    cout << "A";//print A
}

C++ 也提供對應的保留字:and/or/not關鍵字

if (a > 0 and b > 0) {}
符號   關鍵字
&&   | and
||   | or
!    | not

📌實務上大多仍使用符號版本,閱讀他人程式碼時需能辨識。

三、運算只會一次做一件事
C++ 不會同時執行多個運算,而是依序進行。
實際執行順序由以下因素決定:
-運算子優先順序
-運算子結合性(Associativity)
-隱性轉型規則

賦值運算子的順序
賦值運算子是由右向左開始,進行連續賦值。

a = b = c = 9;

等同於

c = 9;
b = c;
a = b;

const:讓物件成為唯讀
const用來表示「初始化後不可再被修改」。

const int x = 10;
x = 20; // 編譯錯誤

使用 const 的好處:
◆避免誤修改
◆提高程式可讀性
◆讓編譯器進行更多檢查與最佳化

複合賦值運算子
複合賦值只是語法的簡化,但仍是正式運算。

a += 5;  // a = a + 5
a -= 3;
a *= 2;
a /= 4;

遞增與遞減運算子
a++與++a 的差異

int a = 5;

int x = a++;  // x = 5, a = 6
int y = ++a;  // a = 7, y = 7

📌差異在於:
a++:先使用,再遞增
++a:先遞增,再使用

未定義行為(Undefined Behavior)
以下程式碼是錯誤示範:

a = a++;

同一個運算式中,同一變數同時被讀取與修改。
結果行為完全不可預期,請務必避免。


如果你也是非本科背景,或正準備開始學習程式,希望這篇筆記能對你有所幫助。
這裡會持續記錄我在轉職過程中對程式、軟體工程與實務學習的理解,歡迎一起交流,也歡迎指教。
如果這篇內容對你有幫助,歡迎收藏或分享給正在學習程式的朋友。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言