---
# System prepended metadata

title: 作業 6 習題解答與出題

---

# 作業6 習題解答與出題

>作者：郭睿豐
>班級：資訊一甲
>學號：D1249858

## 習題
**試指出所需要的遮罩與邏輯運算式以完成下列的任務目標：
a. 在一個八位元字串中前四個位元置入1，並且其餘位元保持不變。
b. 在一個八位元字串中的最高有效位元取其補數，並且其餘位元保持不變。
c. 在一個八位元字串中取其補數。
d. 在一個八位元字串中的最低有效位元置入0，並且其餘位元保持不變。
e. 在一個八位元字串中，除了最高有效位元，其餘置入1，最高有效位元保持不變。
f. 在一個RGB 點陣圖的圖像中，濾掉所有的綠色元素，其中每個像素為24 位元字串，而中間的八位元表示綠色資訊。
g. 反轉24 位元的RGB 點陣圖中的所有像素。
h. 將24 位元的RGB 點陣圖中的所有像素值設為1，亦即色彩為白色。**

## 相關名詞介紹
**1. 位元遮罩：**
位元遮罩是一個二進位數字，其中的每個位元都有特定的值（0 或 1）。它用於操作其他二進位數字，通常透過邏輯運算。位元遮罩通常用於遮掩或選擇一個二進位數字的特定部分，或者對特定的位元進行修改。

**2. 邏輯運算式**
邏輯運算式是一種對二進位數字進行邏輯操作的表達式。這些操作包括 AND、OR、XOR 和 NOT等。
AND（與運算）： 兩個位元都為1，結果才為1。
OR（或運算）： 兩個位元中有一個為1，結果就為1。
XOR（異或運算）： 兩個位元不同，結果為1。
NOT（非運算）： 將每個位元取補數。

## 解答
**a.**
* 遮罩：0b11110000
* 邏輯運算式：OR 

在這邊用0b做為前綴是表示後面的數字是以二進位呈現的，然後透過二進位來做位元的運算。
因題目所要求，前面四個位元要置入1，其餘位元保持不變，因此我們透過原始值和遮罩0b11110000做OR條件運算，由於遮罩前面四個位元都是1，所以原始值和遮罩經過OR條件運算以後，前面四個位元得出的結果也一定都是1，而遮罩後面的4個位元0與原始值做OR條件運算後，原本的結果則不會被影響

**b.**
* 遮罩：0b10000000
* 邏輯運算式：NOT

遮罩第一個位元為1，用來對字串中的最高有效位元取其補數，後面七個位元0則表示其餘位元不變，用邏輯運算式NOT來取補數

**c.**
* 遮罩：無
* 邏輯運算式：NOT

同上利用邏輯運算式NOT來取補數

**d.**
* 遮罩：0b11111110
* 邏輯運算式：AND

遮罩的最後一個位元為0，將其與原始值透過邏輯運算式AND運算後，最低有效位元得出的結果必定為0，其餘七個位元則設為1，使這些位元保持不變

**e.**
* 遮罩：0b01111111
* 邏輯運算式：OR

遮罩的第一個位元設為0，使其經過邏輯運算式OR運算過後，最高有效位元不變，其餘七個位元則設為1，表示剩下的位元置入1

**f.**
* 遮罩：11111111 00000000 11111111(R,G,B) 
* 邏輯運算式：AND

利用遮罩做AND邏輯運算，紅和藍的元素和11111111做AND運算過後，位元保持不變，而綠色則和00000000做AND運算，使其位元必為00000000，進而濾掉綠色元素

**g.**
* 遮罩：11111111 11111111 11111111
* 邏輯運算式：XOR

透過邏輯運算式XOR，表示進行位元異或的運算，像是當位元0（原始值） XOR 位元1（遮罩） 可得出位元1，而位元1（原始值） XOR 位元1（遮罩）則可得出位元0，使其達到反轉的效果 

**h.**
* 遮罩：11111111 11111111 11111111
* 邏輯運算式：OR

由於遮罩全為1，透過OR邏輯運算後，得出的像素值位元必為1，即可得到白色

## 出題
**設有一個八位元字串A，為以下的條件設計位元遮罩： 
a.將A的奇數位元（第1、3、5、7位）置入1，偶數位元保持不變。
b.對A的第3位至第6位（含）的位元取一補數（0和1互換）。**

### 答案
**a.**
* 遮罩：0b10101010
* 邏輯運算式：OR

**b.**
* 遮罩：0b00111100
* 邏輯運算式：XOR