當我在發佈位掩碼之前通過大量網站時,我所理解的是它用於切換1和0之間的切換,並且通常用於基於像素的圖形項目。現在作爲一個初學者真的不明白爲什麼我們切換開關,以及它如何用於圖形.. 也爲什麼我們使用位掩碼來提取位?無符號右移位和位掩碼的應用
-1
A
回答
3
答案在於JLS。 5.6.2節:
加寬原語轉換(§5.1.2)被施加到轉換的任一個或由下面的規則中指定的兩個操作數:
- 如果操作數的類型是雙,所述其他轉換爲雙倍。
- 否則,如果任一操作數的類型爲float,則另一個操作數轉換爲float。
- 否則,如果任一操作數的類型爲long,則另一個操作數轉換爲long。
- 否則,兩個操作數都轉換爲int類型。
最後一點值得關注。這意味着兩個b
轉換爲int
之前執行轉換操作。
因此,原來爲0xF1
的b
被提升爲0xFFFF FFF1
。
然後進行移位:
0xFFFF FFF1 >>> 4 == 0x0FFF FFFF
然後澆注到byte
:
(byte) 0x0FFF FFFF == 0xFF
,你會得到b == -1
。
e
是15因爲面具。
首先,b
從0xF1
提升爲0xFFFF FFF1
。
然後是AND
ED與0xFF
:
0xFFFF FFF1 & 0x0000 00FF == 0x0000 00F1
然後右移4位:
0x0000 00F1 >> 4 == 0x0000 000F
然後將其強制轉換爲byte
:
(byte) 0x0000 000F == 0x0F
你得到e == 15
編輯:沒有擊中「F」足夠的次數,最後以16位int
s ...希望修復,謝謝@Stefan!
相關問題
- 1. 位掩碼和移位運算
- 2. 32位無符號整數的2位右移
- 3. 位掩碼vs移位(+ java字節碼)
- 4. 位移位和位掩碼 - 示例代碼
- 5. SPARC - 沒有移位的位掩碼
- 6. 應用位掩碼的位向量
- 7. 64位位掩碼和javascript
- 8. ulong,位於PHP的位掩碼和位移C#
- 9. 4位LCD控制的PIC位掩碼和移位
- 10. 向右移位並有符號整數
- 11. 右移進位保存號
- 12. 無符號右移
- 13. 使用位掩碼
- 14. 將無符號整數右移UB的總位數?
- 15. 電話號碼前三位掩碼
- 16. 位掩碼和選擇偶數位
- 17. 使用位掩碼或掩碼
- 18. Python的無符號右移
- 19. FilterIterator位掩碼(或位域)
- 20. 負位數移位的位移符號運算符
- 21. 有符號移位
- 22. 如何使用位掩碼運算符
- 23. 無符號16位和64位整數
- 24. Arduino上的無符號長按位移
- 25. 使用右移運算符掩蔽符號擴展>>
- 26. 將位掩碼應用於BufferedImage
- 27. 在python中應用位掩碼
- 28. 攤位算法和右移
- 29. 按位和左/右移
- 30. RegEx帶位掩碼?
爲什麼用三種不同的語言標記,當你似乎只談論Java?規則擴展和位移不能期望在隨機編程語言集合中是相同的...... – unwind