用 bitmask(位元遮罩)直接操作權限、資料、甚至 AI tensor

更新 發佈閱讀 5 分鐘

這一個題目已經從「數字表示」進入電腦底層操作核心了。

bitmask(位元遮罩)本質就是:👉 用二進制的每一個 bit 當作開關(0/1)來控制資料

用「權限 → 一般資料 → AI tensor」三層幫來說明。


一、什麼是 bitmask?

👉 一句話定義:

bitmask = 一組用來“選擇 / 開關某些 bit”的二進制數

搭配運算:

  • AND(&)👉 篩選
  • OR(|)👉 開啟
  • XOR(^)👉 切換
  • NOT(~)👉 反轉
  • SHIFT(<< >>)👉 位移

二、最經典:權限控制(Linux chmod)

你應該看過:

chmod 755 file

其實就是 bitmask:

7 = 111 (rwx)
5 = 101 (r-x)
5 = 101 (r-x)

權限對應 bit

r = 4 = 100
w = 2 = 010
x = 1 = 001

範例:設定權限

假設:

權限 = 000

開啟 read(r)

000 | 100 = 100

再開 write(w)

100 | 010 = 110

👉 現在是 rw-


範例:檢查權限

110 & 100 = 100 → 有 read
110 & 001 = 000 → 沒 execute

👉 AND 就是「檢查開關」


三、操作一般資料(bit-level 操作)

假設一個 8-bit 資料:

data = 10110010

1️⃣ 取出某幾個 bit

mask = 00001111
  10110010
& 00001111
-----------
00000010

👉 只保留低 4 位


2️⃣ 設定某個 bit(設為 1)

👉 開第 3 位:

data | (1 << 2)

3️⃣ 清除某個 bit(設為 0)

data & ~(1 << 2)

4️⃣ 切換某個 bit(翻轉)

data ^ (1 << 2)

👉 這些就是所有底層操作的核心(在 CPU 裡面每天都在做)


四、進階:bitmask =「多個布林變數壓縮」

例如你有 8 個開關:

A B C D E F G H

傳統:

8 個 boolean

bitmask:

1 個 byte(8 bit)

👉 記憶體直接壓縮 8 倍


五、AI / Tensor 的 bitmask(重點)

在 AI(例如 NVIDIA GPU)中,bitmask 用得非常多:


1️⃣ Attention Mask(Transformer 核心)

在 Transformer:

👉 有些 token 不該被看到(例如 padding)

mask 長這樣:

tokens:   A  B  C  PAD PAD
mask: 1 1 1 0 0

運算時:

attention_score + (mask * -)

👉 mask = 0 → 變 -∞ → 不會被選中


2️⃣ 條件選擇(Tensor 過濾)

例如:

import torch
x = [1, 2, 3, 4]
mask = [1, 0, 1, 0]
result = x[mask]

👉 得到:

[1, 3]

👉 本質就是 bitmask 篩選


3️⃣ GPU 平行計算(warp mask)

GPU 內部:

  • 32 個 thread 同時跑
  • 用 bitmask 決定哪些 thread active

👉 例如:

11101101

代表哪些 thread 在工作


4️⃣ 梯度 / 訓練控制

loss = loss * mask

👉 某些資料:

  • 不計算 loss
  • 不更新梯度

六、超關鍵觀念(你要記住)

bitmask 本質是:

👉 用數學運算取代 if / for / 判斷


傳統寫法(慢)

if x[i] != 0:
do something

bitmask(快)

x * mask

👉 GPU 最愛這種(完全平行)


七、為什麼 AI 一定用 bitmask?

因為:

1️⃣ 可完全平行(SIMD / GPU)

2️⃣ 沒有分支(branch-free)

3️⃣ 超高速(硬體直接支援)


八、一句話總結

👉 bitmask = 用 bit 控制世界

  • 在 OS → 控權限
  • 在 CPU → 控資料
  • 在 AI → 控 tensor flow



留言
avatar-img
sirius數字沙龍
17會員
422內容數
吃自助火鍋啦!不要客氣,想吃啥,請自行取用!
sirius數字沙龍的其他內容
2026/04/07
簡單來說,「定點數」是一種數學概念或數據存儲格式,而「Decimal」通常是編程語言中為了實現這個概念而提供的一種具體數據類型(或類庫)。 你可以把它們的关系理解為:「汽車」與「法拉利」。 定點數就像是「汽車」這個概念:指代一種小數點位置固定、用於精確計算的數值表示法。
Thumbnail
2026/04/07
簡單來說,「定點數」是一種數學概念或數據存儲格式,而「Decimal」通常是編程語言中為了實現這個概念而提供的一種具體數據類型(或類庫)。 你可以把它們的关系理解為:「汽車」與「法拉利」。 定點數就像是「汽車」這個概念:指代一種小數點位置固定、用於精確計算的數值表示法。
Thumbnail
2026/04/07
要使用 Python 的 Decimal 模組來避免浮點數精度問題,最關鍵的原則只有一個:絕對不要用浮點數(float)去初始化 Decimal,一定要用「字串(string)」。 這聽起來很簡單,但卻是 90% 的人會踩到的地雷。以下我為你整理了正確的使用步驟、常見錯誤以及進階技巧。
Thumbnail
2026/04/07
要使用 Python 的 Decimal 模組來避免浮點數精度問題,最關鍵的原則只有一個:絕對不要用浮點數(float)去初始化 Decimal,一定要用「字串(string)」。 這聽起來很簡單,但卻是 90% 的人會踩到的地雷。以下我為你整理了正確的使用步驟、常見錯誤以及進階技巧。
Thumbnail
2026/04/07
浮點數運算看似與數學課本上的實數運算無異,但由於電腦內部使用二進制和有限位數來儲存數字(遵循 IEEE 754 標準),在實際程式設計中會遇到許多意想不到的「陷阱」。 這些問題主要可以歸納為三大類:精度誤差、比較失效以及特殊值異常。以下我為你詳細拆解這些問題及其背後的原理。 1. 精度誤差:為什
Thumbnail
2026/04/07
浮點數運算看似與數學課本上的實數運算無異,但由於電腦內部使用二進制和有限位數來儲存數字(遵循 IEEE 754 標準),在實際程式設計中會遇到許多意想不到的「陷阱」。 這些問題主要可以歸納為三大類:精度誤差、比較失效以及特殊值異常。以下我為你詳細拆解這些問題及其背後的原理。 1. 精度誤差:為什
Thumbnail
看更多