[英]Is there a way to deal with 'java: bad operand types for binary operator '!='' in this piece of code?
[英]Java << operator (In this piece of code)
所以我從ViewGroups的這個 Android頁面上閱讀了示例源代碼,並且遇到了以下幾行:
// Report our final dimensions.
setMeasuredDimension(resolveSizeAndState(maxWidth, widthMeasureSpec, childState),
resolveSizeAndState(maxHeight, heightMeasureSpec,
childState << MEASURED_HEIGHT_STATE_SHIFT));
所以我希望學習:
<<運算符在Java中到底做什么?
在上述摘要的最后一行中發生了什么?
謝謝。
它不是操作數,而是運算符。 確切地說,是按位移位運算符 。
給定x
和y
作為操作數, x << y
將x
值y
位的位向左移動。 它基本上等於乘以2的冪y
。
<<是移位運算符之一。
我們很可能在一件事中使用一個32位int的高16位,而在另一件事中使用16位的低位。
childState << MEASURED_HEIGHT_STATE_SHIFT表示childState正在傳遞一個高度(以其低16位為單位),該高度期望傳遞給resolveSizeAndState()的int的高16位。
這是按位和移位運算符。 可以在http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html中找到更多信息。
例如:
1111 1110 << 2
1111 1000 // Have added 0 from right
0001 1111 >> 3
0000 0011 // Will preserve MSB and shift it right
如果您不希望保留第一位,請使用(在Java,Scala,C ++,C afaik等中,甚至更多)三元符號運算符:
1100 1100 >>> 1
0110 0110
<<運算符在Java中到底做什么? 它向左移動位。 如先前的答案所述:
1111 1110 << 2 1111 1000 //從右邊添加了0
在上述摘要的最后一行中發生了什么? 代碼正在更改狀態。 有時用來表示狀態。 例如
state1 = 1 << 0;
state2 = 1 << 1;
state3 = 1 << 2;
所以你有3個獨特的狀態
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.