# 【知識精講】是非之間的邏輯組合
## Part1
之前,我們學習了是、非(真、假)的表示——1、0,還學習了取反符號`!`,知道了 0 的取反結果是 1,1 的取反結果是 0。我們也學習了關系運算的邏輯值的判斷。
你可以回憶一下,對于“3>5”、“?1>1”、“2>?2”和“6>1”這些關系運算他們的邏輯值是怎樣的。
## Part2
你應該得到了結果
* “3>5”為假,取 0;
* “?1>1”為假,取 0;
* “2>?2”為真,取 1;
* “6>1”為真,取 1;
那么,如果我們把它們兩兩組合在一起,得到諸如 “3>5 且 ?1>1”、“3>5或2>?2”這樣的表述;在 C++ 語言中,我們可以用`&&`表示“且”,用`||`表示“或”。這樣,“3>5 且 ?1>1”在程序中可以被表示為`3 > 5 && -1 > 1`的形式,“3>5 或 2>?2”在程序中則可以被表示為`3 > 5 || 2 > -2`的形式。
這種組合的邏輯值會是什么呢?
## Part3
其實這種且`&&`、或`||`和我們在邏輯上的且、或都是一致的,我們可以根據且、或關系兩側的值判斷他們在一起后的邏輯組合的取值。具體的取值,請參考下面的這個真值表(我們在數理邏輯中學過):
| p | q | p 且 q | p 或 q |
| --- | --- | --- | --- |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 |
## Part4
除了與、或,我們還有一種常見的邏輯組合“異或”,在 C++ 語言中用 `^` 作為這種邏輯運算的運算符。這種運算的真值表如下(建議配合學習《離散結構》課程中的《數理邏輯》一章):
| p | q | p 異或 q |
| --- | --- | --- |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
## Part5
請注意, `&&` 的結合優先級是高于 `||` 的。也就是說
~~~
m == 4 || m == 6 || m == 9 && d < 30
~~~
會被理解成
~~~
m == 4 || m == 6 || (m == 9 && d < 30)
~~~
如果我們希望表示 `m` 是 4 或 6 或 9 的前提下,同時 `d` 小于 30。我們則需要添加括號改變邏輯組合的順序:
~~~
(m == 4 || m == 6 || m == 9) && d < 30
~~~
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》