String strs = "13634393448";Bytes.toBytes((short) (strs.hashCode() & 0x7fff));
这里面的 & 0x7fff 是什么意思呢?
学习是最好的投资!
0x07fff=0111111111111111跟這個東西做與操作會有什麼情況,就頭位是0,與完了其他位都不變。
根據資料型,帶符號資料型別中高一位代表符號,在這種情況下做與操作,作用是取絕對值,也就是取到有用的15位。
有的時候按位搜尋或是位元運算都會相對快一些。
還有一種情況是裝逼用。
String.hashCode()的返回值计算方式为:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]你给的13634393448,其hashCode结果是1002012672,也就是0x3bb98000。同0x7fff做"与"操作,也就是表示取0x3bb98000后三位的值,本题的结果自然就是0了。
String.hashCode()
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
1002012672
0x3bb98000
0x7fff
0
0x7fff = 0111 1111 1111 1111& 為與運算所以這個操作就是取「13634393448」這個數二進位表示後的最後15位數
0x 轉換16進位
單一 & 是 按位与操作, 两个 & 是邏輯與
&
0x07fff=0111111111111111
跟這個東西做與操作會有什麼情況,就頭位是0,與完了其他位都不變。
根據資料型,帶符號資料型別中高一位代表符號,在這種情況下做與操作,作用是取絕對值,也就是取到有用的15位。
有的時候按位搜尋或是位元運算都會相對快一些。
還有一種情況是裝逼用。
String.hashCode()
的返回值计算方式为:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
你给的13634393448,其hashCode结果是
1002012672
,也就是0x3bb98000
。同
0x7fff
做"与"操作,也就是表示取0x3bb98000
后三位的值,本题的结果自然就是0
了。0x7fff = 0111 1111 1111 1111
& 為與運算
所以這個操作就是取「13634393448」這個數二進位表示後的最後15位數
0x 轉換16進位
單一
&
是 按位与操作, 两个&
是邏輯與