位操作在為硬體程式設計中是非常普遍的。往往是暫存器的各位都具有不同的意義,包括獲取位狀態,給位置數等。
正因為位操作這麼普遍,往往容易出現錯誤,而且除了那些對hex編碼,以及二進位制編碼非常熟悉的大牛之外,一般很難發現錯在哪。
另外,尤其是在中斷之類的要求快速處理完成的過程中,對位操作的執行效率要求也高。
我使用模板對位操作做了乙個簡單的封裝
定義各種型別的位掩碼:
/**
* 位掩碼
*/templateclass bitmaskset;
templateconst t bitmaskset::v = (1u<
bitmaskset::v;
/*** 清除位掩碼
*/templateclass bitmaskclr;
templateconst t bitmaskclr::v = ~(1u<
/*** 獲取位值
* @param v
* @return
*/templateinline tmask getbit( const tv& v )
/** * 位值是否設定
* @param v
* @return
*/templateinline bool isbitset( const tv& v )
/** * 設定位
* @param v
*/templateinline void bitset( tv& v )
/** * 清除位
* @param v
*/templateinline void bitclr( tv& v )
下面來舉幾個例子
比如在pie模組中,使能pdpinta或者禁用,可以使用一下**:
inline void en_pdpinta()
inline void dis_pdpinta()
從編碼風格上看,上面的兩行**非常整齊,而且很直觀的看出都是對位0進行操作,乙個是設定,乙個是清除。
即使有書寫錯誤也很容易識別出來。
C 操作MongoDB的幫助類 簡單封裝
好了,不多說,直接把dll和 記下來,以便以後直接使用。c 版的mongodb驅動是用官方提供的mongo csharp driver 引用 mongodb.driver.dll,mongodb.bson.dll 具體 部分 mongodb幫助類 public class mongodbhelper...
C 簡單封裝的理解
以人說語言為例 介面 inte ce ipeople class chinese ipeople public void kongfu 多型,因為american類中沒有 class american ipeople public void fight class program static vo...
cookie的簡單操作與封裝
設定cookie document.cookie 鍵 值 expires 失效時間 獲取cookie var cookie document.cookie 如果要具體獲取到乙個值,需要處理這個字串 炸開取下標 修改cookie,就是重新設定 乙個cookie 刪除cookie document.co...