所以第一個:位轉移
我想你聽說過二進制數字。現在大多數人在我們的日常業務中使用十進制數字系統,您的數字範圍從0到9。您使用的每個號碼都是由0-9的數字組成的。二進制系統只使用數字0和1,這是非常方便的計算機,因爲然後使用可以表示與功率容易號碼:
0 =無功率
1 =功率
同十進制數字系統可以通過將數字彼此相鄰來製作更大的數字:十進制10中是9 + 1。在二進制10中是1 + 1。
Binary = Decimal
0 = 0
1 = 1
10 = 2
11 = 3
100 = 4
101 = 5
110 = 6
111 = 7
等等。
計算機通常與固定長度的數字(至少與整型量擬合選取,如int,長,短,字節,...)工作,所以它們填充在左邊用0所有剩餘的數字:
5 in decimal = 101 in binary = 00000101 in 8-bit (byte) = 0000000000000101 in 16-bit (short)
等。
比特移位確實這是什麼移動的所有位在一個方向上:
Right-Shift by two digits:
00001101 >> 2 = 00000011
Left-Shift by three digits:
00001101 << 3 = 01101000
甲左移位等效於乘以2而右移位等效於除以2(這裏所說的正數,因爲負數有點不同)。
我們第二個:屏蔽 這是現在這個部分: SDATA [I] &設爲0x00FF
起初,我們在這裏有另一個數字表示法:十六進制數。它的工作原理與現在的二進制數字有16個不同的數字:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。他們每個人都代表二進制中的四位數字,這樣你就可以僅僅通過以下數字來代替每個數字在兩者之間轉換:
Hex = Binary
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111
所以在這裏給出設爲0x00FF數量在16位二進制等於0000000011111111。
現在到&,或實際的掩蔽。該& - 運算符的每一位,其中兩個輸入是1和0的每一位,其中任一輸入爲0返回1:
0101010101010101
&
0000000011111111
=
0000000001010101
所以你看,你可以使用& - 運算符來屏蔽掉所有的在一個輸入字符串中爲0的位。
那麼該函數的那部分功能是將短(16位長)分成兩個獨立的8位字節。假設sData [i]包含此數字:0011001101010101
bytes[i * 2] = (byte) (sData[i] & 0x00FF);
=
bytes[i * 2] = (byte) (0011001101010101 & 0000000011111111);
=
bytes[i * 2] = (byte) (0000000001010101); //lower 8 bit
bytes[(i * 2) + 1] = (byte) (sData[i] >> 8);
=
bytes[(i * 2) + 1] = (byte) (0011001101010101 >> 8); //Right shift by 8 spaces
=
bytes[(i * 2) + 1] = (byte) (0000000000110011); //upper 8 bit
您應該真的瞭解Java運算符的功能 - 只有這麼多。 +, - ,*和/不夠。 – Ingo