我是一個相對不錯的程序員,我喜歡做研究和討厭提問,但是這段代碼很麻煩。 它與XQueryKeymap使用,但我完全不明白:像宏這樣的函數是什麼意思?
#define BIT(c,x) (c[x/8]&(1<<(x%8)))
什麼是真正困擾我的是[]
和<<
符號。但如果你能口頭說出整個事物的意義,我會非常感激。
我是一個相對不錯的程序員,我喜歡做研究和討厭提問,但是這段代碼很麻煩。 它與XQueryKeymap使用,但我完全不明白:像宏這樣的函數是什麼意思?
#define BIT(c,x) (c[x/8]&(1<<(x%8)))
什麼是真正困擾我的是[]
和<<
符號。但如果你能口頭說出整個事物的意義,我會非常感激。
它將數據打包到char數組中。每個數組元素有8位(一個char數組),因此數組中的索引由x/8
定義 - 同時1<<(x%8)
將char中的8位與模數(x/8
的其餘部分)相移 - - 如果設置了位x
,則該宏返回非零值;如果不是,則返回0。
Ewww。如果c
不是derefencable類型,並且x
不是整數類型,則此宏將失敗。另外,沒有括號使得這更不安全。不好的代碼。
它是將x
作爲位數轉換爲c
中包含的內存陣列的簡稱。 <<
向上移動掩碼以讀取該位,並且[]
用於讀取存儲器。如果數組中的位被設置,則返回1,否則返回0 - 因此BIT
名稱。
我是唯一一個拒絕編輯這個並用['CHAR_BIT'](http://en.cppreference.com/w/c/types/limits)替換'8'的人? – WhozCraig
我想繼續自己的括號狂歡。那宏觀臭味。 –
我不同意你們的看法,但事實是,大部分代碼都是草率的,沒有記錄,但至少它完成了工作,我(+許多其他人)已經學到了一些新東西。 – FutureSci