你說說為神馬錶的總數、redis庫的總數、HashMap的數量最好是2的N次方
資料在表庫HashMap 落地時候都會跟總數取模,這個我們做個測試
假設數量是2的3次方就是8,即索引就是0-7
php -r “echo 58 % 8;
php -r “echo 58 & 7;
00111010 & 00000111 = 00000010 =》2
再來個
php -r “echo 1234567 % 8;”
php -r “echo 1234567 & 7;”
100101101011010000111 & 00000111 = 00000111=》7
你就說等不等。
結論:本來需要算術運算實現,如果是2的N次方的話,計算機內部就可以使用位運算實現了。主要是運算速度提高了。
那為神馬位運算比算術運算速度快呢?
我覺得主要是位運算都是對記憶體上的二進位制數直接操作。如果使用十進位制的取模的話,必須先從記憶體裡面讀到二進位制數的這兩個數,再轉成十進位制數,再運算。
為嘛一個位元組使用兩個16進位制數表示
使用ultraedit開啟影像檔案,或者使用瀏覽器工具開啟socket通訊的內容,均是兩個16進位制數一組分隔。就是因為展示的時候兩個16進製表示一個位元組。
一個位元組8位,拆開的話,前後四位,0000-1111能表示16個數,1111是15,加上0是16.所以1個位元組只能使用兩個16進製表示
本來還想分享下base64的為啥能顯示二進位制表示的資料。想想還得先說亂碼的原因。