C語言編程中布爾設置位掩碼示例

在C語言編程中,當你想使用整數(通常是unsigned int或uint8_t, uint16_t, uint32_t等)的位來存儲多個布爾設置時,你會使用位掩碼。每個設置對應于整數中的一個位,你可以通過位操作(如按位與&、按位或|、按位異或^、按位取反~、左移<<和右移>>)來讀取或修改這些設置。

下面是一個示例,展示了如何為settings.flag中的布爾設置定義位標志掩碼:


#include <stdint.h> // 包含stdint.h頭文件以使用固定寬度的整數類型  // 定義一個結構體來存儲設置  
typedef struct {  uint8_t flag; // 使用8位無符號整數來存儲標志  
} Settings;  // 定義位標志掩碼  
#define SETTING_A_MASK (1 << 0) // 設置A的掩碼,對應于flag的第0位  
#define SETTING_B_MASK (1 << 1) // 設置B的掩碼,對應于flag的第1位  
#define SETTING_C_MASK (1 << 2) // 設置C的掩碼,對應于flag的第2位  
// ... 可以繼續定義更多的設置  // 函數來設置或清除特定的標志  
void setSetting(Settings *settings, uint8_t mask, int value) {  if (value) {  settings->flag |= mask; // 如果value為真,則設置標志  } else {  settings->flag &= ~mask; // 如果value為假,則清除標志  }  
}  // 函數來檢查特定的標志是否被設置  
int isSettingSet(Settings *settings, uint8_t mask) {  return (settings->flag & mask) != 0; // 如果與運算的結果不為0,則標志被設置  
}  int main() {  Settings mySettings = {0}; // 初始化設置,所有標志都未設置  // 設置設置A  setSetting(&mySettings, SETTING_A_MASK, 1);  // 檢查設置A是否被設置  if (isSettingSet(&mySettings, SETTING_A_MASK)) {  printf("Setting A is set.\n");  }  // 清除設置B(盡管它之前未被設置,但此操作無害)  setSetting(&mySettings, SETTING_B_MASK, 0);  // ... 其他操作  return 0;  
}

在這個示例中,我們定義了一個Settings結構體,它包含一個uint8_t類型的flag成員,用于存儲標志。然后,我們為每個設置定義了一個位掩碼,這些掩碼用于通過位操作來讀取或修改相應的標志。我們還提供了setSetting和isSettingSet函數來設置和檢查標志。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/9855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/9855.shtml
英文地址,請注明出處:http://en.pswp.cn/web/9855.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust:用 Warp 庫實現 Restful API 的簡單示例

直接上代碼&#xff1a; 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…

uniap之微信公眾號支付

近來用uniapp開發H5的時候&#xff0c;需要接入支付&#xff0c;原來都是基于后端框架來做的&#xff0c;所以可謂是一路坑中過&#xff0c;今天整理下大致流程分享給大家。 先封裝util.js&#xff0c;便于后面調用 const isWechat function(){return String(navigator.userA…

隊列的實現(使用C語言)

完整代碼鏈接&#xff1a;DataStructure: 基本數據結構的實現。 (gitee.com) 目錄 一、隊列的概念&#xff1a; 二、隊列的實現&#xff1a; 使用鏈表實現隊列&#xff1a; 1.結構體設計&#xff1a; 2.初始化&#xff1a; 3.銷毀&#xff1a; 4.入隊&#xff1a; 5.…

OC foudation框架(下)的學習

OCfoudation框架&#xff08;下&#xff09; 前面學習了有關OCfoudation框架的部分內容&#xff0c;我們現在對于后面的內容繼續學習。 文章目錄 OCfoudation框架&#xff08;下&#xff09;數組&#xff08;NSArray和NSMutableArray&#xff09;對集合元素整體調用方法排序使用…

會賺錢的人都在做這件事:你了解嗎?

在我們日常生活的點滴中&#xff0c;以及在各種場合的交互中&#xff0c;利他思維始終扮演著不可或缺的角色。當我們追求合作與共贏時&#xff0c;單方面的自我立場顯然是不夠的&#xff0c;真正的關鍵在于換位思考&#xff0c;尋找并滿足對方的需求。 互利互贏的核心理念正是利…

設置docker容器時區

設置docker容器時區 查看當前系統時間 1.1 查看當前系統版本 cat /etc/issue1.2 查看當前系統時間 date查看鏡像默認時間 2.1 alpine鏡像 sudo docker run -it --rm alpine date2.2 ubuntu鏡像 sudo docker run -it --rm ubuntu date2.3 centos鏡像 sudo docker run -it --rm …

虛擬知識付費系統源碼推薦,在線教育雙十一怎么做活動?

又是一年光棍節&#xff0c;啊不是&#xff0c;剁手節。小伙伴們早就摩拳擦掌準備剁手了&#xff0c;這個時候&#xff0c;幾乎所有線上平臺都行動起來了&#xff0c;而在線教育行業也沒有閑著。如今&#xff0c;雙十一已經成為了各大在線教育公司用來變現的一個大殺器&#xf…

ruoyi-vue-pro 使用記錄(4)

ruoyi-vue-pro 使用記錄&#xff08;4&#xff09; CRM數據庫線索客戶商機合同回款產品其他 CRM 文檔 主要分為 6 個核心模塊&#xff1a;線索、客戶、商機、合同、回款、產品。 線索管理以 crm_clue 作為核心表客戶管理以 crm_customer 作為核心表商機管理以 crm_business 作…

JavaScript數組(Array)方法 - toReversed、toSorted、toSpliced

最近發現幾個數組方法&#xff0c;是一些常規方法的升級版&#xff0c;比較有意思&#xff0c;分享給大家 文章目錄 一、溫故二、知新toReversedtoSortedtoSpliced 一、溫故 我們先來回顧幾個比較常用的方法&#xff1a;reverse&#xff0c;sort&#xff0c;splice眾所周知&a…

luceda ipkiss教程 69:導出器件或者線路的三維模型

ipkiss 3.12版加入write_obj函數&#xff0c;可以直接輸出器件的三維模型。 如&#xff0c;輸出自定義的mmi的三維模型&#xff1a; 代碼如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …

kaldi學習參考

HMM模型 https://www.cnblogs.com/baixf-xyz/p/16777438.htmlhttps://www.cnblogs.com/baixf-xyz/p/16777438.htmlGMM-HMM 基于GMM-HMM的語音識別系統https://www.cnblogs.com/baixf-xyz/p/16777439.html https://www.cnblogs.com/baixf-xyz/p/16777426.htmlhttps://www.cnbl…

全棧開發之路——前端篇(6)生命周期和自定義hooks

全棧開發一條龍——前端篇 第一篇&#xff1a;框架確定、ide設置與項目創建 第二篇&#xff1a;介紹項目文件意義、組件結構與導入以及setup的引入。 第三篇&#xff1a;setup語法&#xff0c;設置響應式數據。 第四篇&#xff1a;數據綁定、計算屬性和watch監視 第五篇 : 組件…

碼一點網站

Linux命令查詢網站 https://www.lzltool.com/LinuxCommand/Index 小林 x 圖解計算機基礎 https://xiaolincoding.com/ 代碼隨想錄 https://programmercarl.com/ 可用于爬蟲 https://books.toscrape.com/ 數據結構可視化 https://www.cs.usfca.edu/~galles/visualization/ …

fastText-文本分類

fastText介紹 fastText是一個快速文本分類算法,與基于神經網絡的分類算法相比有兩大優點: 1、fastText在保持高精度的情況下加快了訓練速度和測試速度 2、fastText不需要預訓練好的詞向量,fastText會自己訓練詞向量 3、fastText兩個重要的優化:Hierarchical Softmax、N-gr…

387.字符串中的第一個唯一字符

刷算法題&#xff1a; 第一遍&#xff1a;1.看5分鐘&#xff0c;沒思路看題解 2.通過題解改進自己的解法&#xff0c;并且要寫每行的注釋以及自己的思路。 3.思考自己做到了題解的哪一步&#xff0c;下次怎么才能做對(總結方法) 4.整理到自己的自媒體平臺。 5.再刷重復的類…

YUV中Y顏色模型的采樣

YUV的特點 相對于表示顏色的GUI&#xff0c; YUI將亮度&#xff08;用Y表示&#xff09;與色調&#xff08;用U和V表示&#xff09;分開來表示。又因為人類視網膜上的視網膜桿細胞要多于視網膜錐細 胞&#xff0c;說得通俗一些&#xff0c;視網膜桿細胞的作用就是識別亮度&…

LabVIEW MEMS電容式壓力傳感器測試系統

LabVIEW MEMS電容式壓力傳感器測試系統 隨著微電子技術的發展&#xff0c;MEMS&#xff08;微電機系統&#xff09;技術在各個領域得到了廣泛應用。MEMS電容式壓力傳感器以其高靈敏度、小尺寸、低功耗等優點&#xff0c;在微傳感器領域占據了重要的地位。然而&#xff0c;這些…

Smma-net:一種基于音頻線索的目標說話人提取網絡,具有譜圖匹配和相互關注功能

SMMA-NET: AN AUDIO CLUE-BASED TARGET SPEAKER EXTRACTION NETWORK WITH SPECTROGRAM MATCHING AND MUTUAL ATTENTION 第二章 目標說話人提取之《Smma-net:一種基于音頻線索的目標說話人提取網絡&#xff0c;具有譜圖匹配和相互關注功能》 文章目錄 SMMA-NET: AN AUDIO CLUE-…

程序員的多維智慧:技術修煉、人際交往與投資哲學

程序員不應該只會埋頭敲代碼&#xff0c;要多看看書&#xff0c;多學習... 1.程序員技術 保持嚴謹的作風&#xff0c;實事求是&#xff0c;記錄現象&#xff0c;找準依據&#xff0c;可以做出假設&#xff0c;問題的解釋和結論必須能完整、全面符合現象和各種認知邏輯。 絕不…

【算法入門賽】B. 自助店評分(C++、STL、推薦學習)題解與代碼

比賽地址&#xff1a;https://www.starrycoding.com/contest/8 題目描述 在上一場的入門教育賽中&#xff0c;牢 e e e找到了所有自助店的位置&#xff0c;但是他想發現一些“高分好店”&#xff0c;于是他利用爬蟲技術從“小眾點評APP”中爬取了武漢所有自助店的評分。 評分…