为什么分库分表使用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后端技术,关注公众号
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值