為什么分庫分表使用2的N次方 一個字節用兩位16進制


你說說為神馬表的總數、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的為啥能顯示二進制表示的數據。想想還得先說亂碼的原因。

------------------------------------end
一起關注高性能WEB后端技術,關注公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM