3 回答

TA貢獻1812條經驗 獲得超5個贊
它們是按位移位運算符。x << y表示x ×2 y,而x >> y表示x ×2 -y或等效地x÷2 y。這些運算符通常用于操作值的二進制表示形式,就像用十進制的10的冪一樣,乘以2的乘方或除以分別將數字“左移”或“右移”:
// Left shift:
13 * 2 == 26 // decimal
1101 * 10 == 11010 // binary (13 is 8 + 4 + 0 + 1)
// Right shift (brackets denote discarded portion):
13 / 2 == 6[.5] // decimal
1101 / 10 == 110[.1] // binary
由于您是對整數進行運算,并且右移通常會產生分數值,因此有兩種方法可以處理右舍入的結果如何取整。在Go中,右移是無符號值的邏輯移位,而有符號值的算術移位。邏輯移位總是四舍五入,而算術移位總是四舍五入,即-∞。

TA貢獻1827條經驗 獲得超4個贊
從規格:
Arithmetic operators
...
<< left shift integer << unsigned integer
>> right shift integer >> unsigned integer
以及以下:
移位運算符將左操作數移位由右操作數指定的移位計數。如果左操作數是有符號整數,則執行算術移位;如果左操作數是無符號整數,則執行邏輯移位。班次計數沒有上限。移位的行為就好像左操作數被n移位了n次,移位次數為n。結果,x << 1與x * 2相同,x >> 1與x / 2相同,但被截斷為負無窮大。

TA貢獻1794條經驗 獲得超8個贊
這是位左移和位右移運算符。它們與C語言及其衍生語言相同。
x << y
是x的2乘以y的冪
x >> y
x被2除以y的冪(小數部分被舍棄)
如果將數字視為二進制,則乘以2的冪會將位左移(101 * 2 ^ 3變為101000),其方式與十進制乘以10的冪相同,即將數字左移(12340 * 10 ^ 3變成12340000)。相反,除以2的冪是正確的。它會將二進制表示形式向右移動。由此得名。順便說一句,這對于計算機而言是一種極其快速的操作,因此,它在諸如密碼學之類的性能至關重要的比特旋轉應用中被大量使用。
- 3 回答
- 0 關注
- 810 瀏覽
添加回答
舉報