我正在準備技術性採訪,我注意到一些涉及位掩碼和位移的練習題。我不熟悉這些概念。我明白,如果你使用半個字節並想讓另一半可用,你可以屏蔽你想使用的4位,但我仍然很困惑它如何容易理解或應用於編碼問題。如果某人有足夠的知識或某種資源以非常簡單的方式解釋這一點(最好用Java),我將不勝感激。謝謝!有人可以解釋屏蔽位的實際使用和實現嗎?
-1
A
回答
0
位掩碼是一個有效的工具,如果你有布爾標誌,你會喜歡它的簡潔表示,或者如果你希望能夠有效地測試的真/假模式的某些組合的集合。
例如,假設下面的(C++,因爲我的Java是相當生鏽):
enum {
FlagOne = (1<<0),
FlagTwo = (1<<1),
FlagThree = (1<<2),
FlagFour = (1<<4),
FlagOneAndFour = FlagOne | FlagFour
};
unsigned int flags;
你現在可以做一個非常簡潔的方式各種測試。例如,要測試是否任何FlagOne,FlagTwo或FlagFour的設置,你可以寫
if(0 != (flags & (FlagOne | FlagTwo | FlatFour))) {
/*...*/
}
或者,如果你想測試FlagOneAndFour被設置,你可以做
if(FlagOneAndFour = (flags & FlagOneAndFour)) {
/*...*/
}
0
下面是一些例子:
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c); // a & b = 12
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c); // a | b = 61
c = a^b; /* 49 = 0011 0001 */
System.out.println("a^b = " + c); // a^b = 49
c = ~a;/*-61 = 1100 0011 */
System.out.println("~a = " + c); // ~a = -61
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c); // a << 2 = 240
c = a >> 2; /* 215 = 1111 */
System.out.println("a >> 2 = " + c); // a >> 2 = 15
c = a >>> 2; /* 215 = 0000 1111 */
System.out.println("a >>> 2 = " + c); // a >>> 2 = 15
但是已經有一個很好的全面的SO question on bit operations in Java。
相關問題
- 1. 有人可以解釋實體SQL中的REF,CREATEREF,DEREF,KEY嗎?
- 2. 有人可以解釋這裏的實際錯誤以及如何解決它嗎?
- 3. 有人可以解釋iOS4的CMTime嗎?
- 4. 有人可以解釋我在Java中使用鏈接列表堆棧的以下實現嗎?
- 5. 有人可以解釋__declspec(裸體)嗎?
- 6. 有人可以解釋descendantFocusability = afterDescendants嗎?
- 7. 有人可以解釋ja_JP.UTF8嗎?
- 8. 有人可以解釋WebKit嗎?
- 9. 有人可以解釋C#CngKey.Create嗎?
- 10. 有人可以爲我解釋COMTIMEOUTS嗎?
- 11. 有人可以解釋行結束嗎?
- 12. 有人可以解釋MustOverride嗎?
- 13. 有人可以解釋參數autovacuum_naptime嗎?
- 14. 有人可以解釋Spring Security BasePermission.Create嗎?
- 15. 有人可以解釋DBCC DROPCLEANBUFFERS嗎?
- 16. 有人可以解釋facelets嗎?
- 17. 有人可以向我解釋這是如何實際工作(atoi)
- 18. 有人可以解釋什麼這個代碼涉及免費()實際上
- 19. 有人可以解釋OrgDBOrgSettings實用程序的配置設置嗎?
- 20. 有人可以解釋使用SBT的正確方法嗎?
- 21. 有人可以解釋C#中接口的確切使用嗎?
- 22. 有人可以向我解釋ARM按位操作嗎?
- 23. 有人可以解釋一下MERGE語句在Oracle中的真實含義嗎?
- 24. 有人可以解釋「 - '0'」
- 25. 有人可以提供存根和驅動程序的實際例子嗎?
- 26. 可以使用Java註釋實現「策略模式」嗎?
- 27. 有人可以解釋UINavigationController setViewController和popToViewController
- 28. 有人可以解釋在iOS中使用initWithNibName給我嗎?
- 29. 在iphone編程中使用標籤 - 有人可以解釋嗎?
- 30. THREE.js - 有人可以解釋如何使用這個庫嗎?
對於一個具體的,現實的例子(不支持Java,通常情況下),編碼問題,他們可能會被應用的,並非偶然的是,IP網絡術語「子網掩碼」被稱爲是。 – 2015-02-23 23:06:13