簡體   English   中英

Java <<運算符(在這段代碼中)

[英]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));

所以我希望學習:

  1. <<運算符在Java中到底做什么?

  2. 在上述摘要的最后一行中發生了什么?

謝謝。

它不是操作數,而是運算符。 確切地說,是按位移位運算符

給定xy作為操作數, x << yxy位的位向左移動。 它基本上等於乘以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 教程中的解釋

有符號的左移位運算符“ <<”將位模式向左移位,而有符號的右移位運算符“ >>”將位模式向右移位。

我也從這里引用一個例子

int a = 60;     /* 60 = 0011 1100 */
int c = 0;
c = a << 2;     /* 240 = 1111 0000 */

因此您可以看到<< << 幾乎是a *(2 ^ n)

  1. <<運算符在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM