位運算直接操作整數二進制位。int8/char 8位,int16/short 16位,int32 32位。遊戲開發中常關注特定位的 0/1 狀態而非整數值。
// 檢查第 pos 位是否為 1 (1-based)
int bitCheck(int state, int pos) {
return state & (1 << (pos - 1));
}
// 將第 pos 位置 1
int bitAdd(int state, int pos) {
return state | (1 << (pos - 1));
}
// 將第 pos 位置 0
int bitDel(int state, int pos) {
return state & (~(1 << (pos - 1)));
}
NPC 狀態:行走、站立、普通攻擊、技能攻擊、暴擊、命中、BUFF 等。傳統做法用多個 bool,網絡同步逐個發送。位運算方案:一個 int32 管理 32 種狀態。
#define STATE_WALK 1
#define STATE_STAND 2
#define STATE_ATTACK 3
#define STATE_SKILL 4
#define STATE_CRIT 5
#define STATE_HIT 6
int8_t state = 0;
state = bitAdd(state, STATE_ATTACK); // 發起攻擊
state = bitAdd(state, STATE_HIT); // 命中
state = bitAdd(state, STATE_CRIT); // 暴擊
if (!bitCheck(state, STATE_HIT)) { // 未命中處理
// ...
}
每日登錄、排位賽、競技場、公會、在線、簽到等獎勵。服務端計算可領取狀態打包成一個 int,客戶端解析各位決定按鈕紅點顯示。玩家點擊時再拉取詳細數據。
| 場景 | 操作 | 示例 (a=321=0x0141) |
|---|---|---|
| 清零 | a & 0x0 | 0x0141 & 0x0 = 0 |
| 取低 8 位 | a & 0xFF | 0x0141 & 0xFF = 0x41 (65) |
| 取高 8 位 | a & 0xFF00 | 0x0141 & 0xFF00 = 0x0100 (256) |
| 取第 7-8 位 | a & 0x0180 | 0x0141 & 0x0180 = 0x0100 |