SheepDev

數值、單位與位元

旗標值 13 啟用了哪些設定?

使用工具

日誌 flags=13 本身不能說明哪些選項啟用。位元旗標把分配給 1、2、4、8 等位權的選項組合進一個整數。這裡固定八位元無符號,依序讀取、檢查、設定、清除;功能名只是範例,不修改實際權限。

13 有三個位元為 1

按八位元讀取設定值
13 = 8 + 4 + 1
00001101
       1 → option A
     100 → option C
    1000 → option D

進位轉換將十進位 13 轉為 1101,補齊八位元是 00001101,位權 1、4、8 為 1。若從 bit 0 編號,就是 bit 0、2、3。值為 4 的旗標不一定是所謂第四位,需區分權值與位置。

二進位不能告訴你每位功能名。另一應用中的 13 可能完全不同。應先取得 A=1、B=2、C=4、D=8 等正式對應。位元運算用於核對,不會從未知數值推斷意義或安全性。

用 AND 取出關心的位元

已設與未設旗標
13 AND 4 = 4
13 AND 2 = 0
13 AND 6 = 4

選擇寬度 8、無符號、十進位輸入與 AND。13 與 4 得 4,表示該位存在;第二值改為 2 得 0。AND 回傳共同為 1 的位元組成的整數,不是 true/false 文字。

多個旗標一起查時,非零不代表全部啟用。遮罩 6 組合 2 與 4,13 AND 6 為 4,只存在其中一部分。全部成立需結果等於遮罩,有任一個則只需非零。應先明確判斷問題。

OR 用於設定位元,不等於加法

同一旗標設定兩次
13 OR 2 = 15
15 OR 2 = 15
13 + 2 = 15
15 + 2 = 17

啟用旗標 2 時,13 OR 2 得 15,再 OR 2 仍為 15。加法第一次恰好相同,但 15+2=17,進位改變其他位元。因此不能用加法代替可重複執行的設定位元。

更新實際設定前,比較原值、遮罩與結果。二進位應保留 1、4、8,僅新增 2。該頁面只計算,不會改伺服器設定或裝置權限。

XOR 是切換,不是始終清除

切換與清除的差別
13 XOR 4 = 9
9 XOR 4 = 13
13 AND 251 = 9
9 AND 251 = 9
251 = 11111011 (8 bits)

13 XOR 4 得 9,看似清除了 4;但 9 XOR 4 又得 13。XOR 翻轉指定位元,原本關閉就會開啟。明確設為 OFF 與切換目前狀態不同。

八位元下清除 4 的遮罩為 11111011,即 251。13 AND 251 與 9 AND 251 都得 9,重複清除仍保持關閉。遮罩依賴位元寬度,別把 251 原樣套進不同寬度。

結果應同時保留位元寬度與符號條件

本文採用八位元無符號。NOT 依賴位元寬度,同一位元串按有符號解讀可能顯示負數。分享時附位元寬度、符號、輸入進位、運算與越界策略,便於重現。

最後還要判斷 15 是否為允許的組合。可表示的位元串可能包含互斥選項或保留位。計算成功不證明應用接受,應回原系統規範確認組合與套用步驟。

參考資料

使用工具

指南 →