[英]What does >> do in Java?
好的,我嘗試查找>>
或 shift 的含義,但正如本網站所解釋的那樣,這超出了我的理解: http : //www.janeg.ca/scjp/oper/shift.html
如果和孩子說話,解釋會是什么?
計算機是二進制設備。 因此,數字由 1 和 0 的序列表示。
Bitshifting 只是將這些 1 和 0 序列向左或向右移動。
所以>>
運算符所做的就是將位向右移動一位。
考慮數字 101:
// Assuming signed 8-bit integers
01100101 // How 101 is represented in binary
00110010 // After right shifting one bit, this represents 50
在這種情況下,最低有效位被截斷。 顯然,魔鬼在細節中,但這就是它真正的全部內容。
<<
運算符執行相反的操作:
// Assuming signed 8-bit integers
01100101 // How 101 is represented in binary
11001010 // After left shifting one bit, this represents -54
// Assuming unsigned 8-bit integers
01100101 // How 101 is represented in binary
11001010 // After left shifting one bit, this represents 202
在這種情況下,最高有效位被截斷,因為我只使用了 8 位。 但是,如果數字有更多位:
// Assuming signed 16-bit integers
00000000 01100101 // How 101 is represented in binary
00000000 11001010 // After left shifting one bit, this represents 202
00000001 10010100 // After left shifting one bit again, this represents 404
因此,您可能會得到不同的數字,具體取決於您正在處理的位數和與這些位相關聯的數據類型。
附錄:如果您想知道二進制的工作原理,請考慮十進制數字系統的工作原理。 考慮數字 5287。它可以這樣寫:
5287
但是你也可以這樣寫:
5287 = (5 * 1000) + (2 * 100) + (8 * 10) + (7 * 1)
然后你可以這樣寫:
5287 = (5 * 10^3) + (2 * 10^2) + (8 * 10^1) + (7 * 10^0)
上面的等式解釋了為什么十進制數系統有時被稱為以 10 為基數的系統。 十進制數字系統使用 10 位數字 (0-9)。 注意指數如何對應數字位置。
二進制數字系統或基數 2 系統是完全相同的東西,但以數字 2 作為指數的基數,並且僅使用兩個數字:0 和 1。
5287 = 00010100 10100111 (base 2)
= (0 * 2^15) + (0 * 2^14) + (0 * 2^13) + (1 * 2^12)
+ (0 * 2^11) + (1 * 2^10) + (0 * 2^9) + (0 * 2^8)
+ (1 * 2^7) + (0 * 2^6) + (1 * 2^5) + (0 * 2^4)
+ (0 * 2^3) + (1 * 2^2) + (1 * 2^1) + (1 * 2^0)
我可以假設我正在與之交談的孩子對二進制有所了解嗎? :)
所有數字都可以用某種二進制表示,如下所示:
Base 10 : Base 2
1 : 0001
2 : 0010
3 : 0011
4 : 0100
5 : 0101
6 : 0110
7 : 0111
8 : 1000
……等等。
移位運算符基本上將所有位(1 或 0)移動到一個位置。 所以,例如:000111 >> 1
將 000111 中的所有位右移一個數字以產生以下結果:
000011
000111<<1
將所有這些位左移一,以產生這個:
001110
如果您移位不止一個,那么它只會進一步移動這些位。
現在,根據您使用的語言和您使用的數字類型,它可能比這更復雜一點。 例如,如果您使用一種語言,其中“最高有效位”(數字中最左邊的一位)代表數字是否有符號,則該語言必須考慮到這一點。
從數學上講,如果你取一個整數(並忽略溢出的風險,這是由計算機用完空間來存儲位引起的),左移 1 (<< 1) 相當於乘以 2,然后移位右除以 1 相當於除以 2。(想想二進制數學中的“位值”是多少,這是有道理的)
>>
SHIFT RIGHT
運算符
示例:
class X
{
public static void main(String args[])
{
System.out.println("20>>2 = "+20>>2);
}
}
輸出: 20>>2 = 5
說明:
20
二進制值是: 00000000000000000000000000010100
將所有位2
位右移00000000000000000000000000000101
它會給5
( 1*2^2 + 0*2^1 + 1*2^0
)
我曾經寫過一個 JApplet (bitorgel) 並將它放在我的網頁上,在那里人們可以玩弄位運算符。 您可以現場試用,或下載源代碼。 AFAIK 它們在 C、C++ 和 Java 中的工作方式相同 - 可能也在 C# 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.