回答
讓我們把它分解,一塊一塊:
1UL
是unsigned long int
與在位級所表示的1的值:
00000000000000000000000000000001
的<<
是一個「位移位」運算符,它會將上述值中的所有位移動到左側bitno
的次數。如果是1UL<<5
,你會擁有:
00000000000000000000000000100000
一旦你有了這個值,|=
(這是一個bitwise OR operation與分配)將基本上強制var
位這是符合這一1
是一個1
和不會觸摸的任何其它位,因爲(X | 0 = X
)
比方說var
是37
和bitno
是7
。然後,一切都在位水平將是這樣的:
00000000000000000000000000100101 // var
00000000000000000000000010000000 // 1UL<<7
00000000000000000000000010100101 // var | (1UL<<7)
最後,如果是不明確的,#define
馬克Bitset
作爲function-like macro。
這是一個宏。每當預處理命中如下語句Bitset(var,bitno)
它忠實地
var = var | 1UL << (bitno)
進一步取代它來解釋這一點。
UL這裏的意思是無符號長整數。
運算符|
用於bitwise OR
運算。所以可變var
是OR
ED與 1UL << bitno
和期間運行時或編譯時取決於程序的性質分配回var
然後,
說var
是01000110
和bitno
是5
然後1UL << 5 = 32
或00100000
然後
var = 01000110 | 00100000
var = 01100110
即
說VAR = 8,也就是說在二進制0000 1000
。
如果你
8 | 16
,你將有0000 1000 | 0001 0000
,這將給你0001 1000
,因爲|
操作設置位,如果任一位爲1
所以你申請的|
運營商的價值, 1<<n
,即0000 0001
向左移位n位。
例如1 << 3
是0000 0001 << 2 = 0000 0100
。
實質上:做Bitset(8,3)
會生成一個掩碼,只有第三位通過做1 << 3
設置,得到0000 0100
。 然後它將「或」這個掩碼設置爲8,給出:0000 1000 | 0000 0100
,導致0000 1100
,也就是說,您設置了8位的第三位。
- 1. ANSI C位操作庫C
- 2. C++中的按位設置
- 3. 在C++中按位設置
- 4. 獲取設置位的位置C
- 5. 設置TextLabel位置Objective-c
- 6. Ansi的Netdb.h C
- 7. 將Visual C++ Studio/Express設置爲嚴格的ANSI模式
- 8. 在C++中設置單獨的位
- 9. 如何保存在ANSI C數組中的位置的值和索引?
- 10. 查詢C#中是否設置了位的位置
- 11. 使用c設置表單的位置#
- 12. 設置OXYPLOT C的位置和大小#
- 13. C++設置的dll搜索位置
- 14. ANSI C全位位置類型 - 促進安全字符和-Wsign-conversion
- 15. 使用ALTER設置ANSI填充關閉
- 16. 使用ANSI C
- 17. 在ANSI C++
- 18. getopt()在ANSI C
- 19. ANSI C是否對內存中的程序大小設置了限制?
- 20. 方法的位標誌參數如何工作(Ansi C/C)?
- 21. C#Windows服務保存設置的位置屬性設置
- 22. 在ANSI C中解析JSON
- 23. 是被認爲是ansi C的printf(3)的格式「位置參數」
- 24. Windows Update API c#:設置下載位置
- 25. C#Winform:設置文件保存位置
- 26. C++ win32設置光標位置
- 27. RichTextBox C#設置插入位置winforms
- 28. 設置任務欄位置Win7 C++
- 29. 設置鼠標位置不工作c#
- 30. 在C++中設置(短整型)的高位和低位字節
語法由完全不起眼的C運算符組成。沒什麼不尋常的。你想要解釋什麼?如果您不知道基本C語言操作符的含義,那麼您可以在* book *中讀取它。這不是「解釋C語言中的一般表達式語法」問題的地方。如果您在理解某些具體問題時遇到問題,那麼您必須說明它是什麼。 – AnT
這是一個宏。將宏名稱「Bitset」替換爲後面的字符,將宏的位置參數替換爲「var」和「bitno」。剝去不必要的支撐物以更好地理解它。 –
你可能會被很少使用的「1UL」拋出,它只是無符號長整型的文字1。 –