首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言用 16 位十六制數表示 64 狀態:位操作與掩碼判斷

     編輯:程式設計綜合問答

需求澄清

題目描述略有混淆:16 位二進制只能表示 16 個獨立狀態(每位一燈)。若要表示 64 狀態,需 **64 位(8 字節 / uint64_t)**。文中「16 位十六進制」實指 **16 個十六進制字符 = 64 位二進制**。

數據結構選擇

#include <stdint.h>
uint64_t ledState = 0; // 64 位無符號整數,每位對應一盞燈

核心操作封裝

// 點亮第 n 盞燈 (1-64)
void ledOn(uint64_t *state, int n) {
    *state |= (1ULL << (n - 1));
}

// 熄滅第 n 盞燈
void ledOff(uint64_t *state, int n) {
    *state &= ~(1ULL << (n - 1));
}

// 判斷第 n 盞燈是否亮
bool ledIsOn(uint64_t state, int n) {
    return (state & (1ULL << (n - 1))) != 0;
}

// 切換第 n 盞燈
void ledToggle(uint64_t *state, int n) {
    *state ^= (1ULL << (n - 1));
}

十六進制字面量對應關係

十六進制二進制(低16位)含義
0x8000 0000 0000 00001000 0000 0000 0000第 1 燈亮 (最高位)
0x4000 0000 0000 00000100 0000 0000 0000第 2 燈亮
0xF000 0000 0000 00001111 0000 0000 0000第 1-4 燈亮
0x0F00 0000 0000 00000000 1111 0000 0000第 5-8 燈亮

注意:十六進制每字符 4 位,16 字符 = 64 位。高位在左對應低序號燈,視具體映射約定而定。

完整判斷函數示例

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

bool checkLed(uint64_t state, int ledNum) {
    if (ledNum < 1 || ledNum > 64) return false;
    return (state & (1ULL << (ledNum - 1))) != 0;
}

int main() {
    uint64_t state = 0x0F00000000000000ULL; // 第 5-8 燈亮
    printf("LED 5: %s\n", checkLed(state, 5) ? "ON" : "OFF"); // ON
    printf("LED 1: %s\n", checkLed(state, 1) ? "ON" : "OFF"); // OFF
    return 0;
}

總結

  • 用 uint64_t 存 64 狀態,位操作 | & ^ ~ << 完成增刪改查。
  • 十六進制字面量方便初始化/調試,0xF = 4 位全 1。
  • 掩碼 1ULL << (n-1) 是核心,ULL 防止 32 位溢出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved