的介紹位移位運算符:
首先,我們有左移操作,x << n
。這將在所有由x
位n
左位移位,零填充新位:
1111 1111
<< 3: 1111 1000
接下來,我們已經簽署的右移位運算符,x >> n
。這n個移動所有位在x
權,複製符號位到新的位:
1111 1111
>> 3: 1111 1111
1000 0000
>> 3: 1111 0000
0111 1111
>> 3: 0000 1111
最後,我們有填零右移位運算符,x >>> n
。這種轉變在x
所有位右移n
位,零填充新位:
1111 1111
>>> 3: 0001 1111
您也可以找到有用的按位或操作,x | y
。此位在x
和y
每個位置進行比較,設置上,如果在任一x
或y
是在新的電話號碼的位,否則關:
1010 0101
| 1010 1010
---------
1010 1111
您應該只需要以前的運營商手頭上的問題,但爲了完整起見,這裏是最後兩個:
按位與操作,x & y
設置輸出的比特一個當且僅當該位是在這兩個x
和y
:
1010 0101
& 1010 1010
---------
1010 0000
的按位XOR運算符,x^y
設置輸出位之一,如果所述位是在一個數字或另一個,但不是兩者:
1010 0101
^ 1010 1010
---------
0000 1111
現在,在手施加這些的情況:
您將需要使用位移操作符來添加和操作位。根據字符串表示開始在右側設置位並將其移位。繼續下去,直到達到一個字節的末尾,然後移至下一個字節。假設我們想要創建「1100 1010」的字節表示:
Our byte Target
--------- --------
0000 0000
1100 1010
0000 0001 ^
1100 1010
0000 0011 ^
1100 1010
0000 0110 ^
1100 1010
0000 1100 ^
1100 1010
0001 1001 ^
1100 1010
0011 0010 ^
1100 1010
0110 0101 ^
1100 1010
1100 1010 ^
當然,我會將它應用於您的工作。
你說的是「壓縮二進制表示」,然後說你有一個長度爲18個字符的字符串(「010100111111011000」)來表示一個長度爲7個字符的字(「程序」)。你確定你的意思是你在問什麼?通常情況下,您可以將這些位設置爲X個字節(本例中爲3個)。 –
查找'位移運算符':'>>','>>>','<<'。 – Kevin
Brian在翻譯成二進制文件時原始消息大小爲56位,編碼消息僅爲18位。 凱文,人們不斷告訴我,但我仍然無法畫出使用這些操作符之間的鏈接並能夠將其轉換爲字節數組。 –