文档章节

“求余”

清尘V
 清尘V
发布于 2016/04/15 15:58
字数 280
阅读 22
收藏 0
点赞 1
评论 0

基础:

int length = 4;

定义长度为4(2^n),那么任何一个数如何使4的整数倍:则可以得出如下结论:

int b = 1....100;

即转换成2进制后最后两(n)位必定为0;

length-1=01111....1;

那么b&(length-1)即b的最低n位,也就是余数


假如有这么一种需求:

    发表博客添加标签,根据标签id设置标签显示不同颜色!

设计思路如下:

  •     先定义颜色数组:

String []colorArray={"blue","red","black","pink"};
  • 获取标签id

int id=100;
  • 获取数组长度

int size = colorArray.length;
  •     获取颜色:

  • 第一种方法:

String color = colorArray[id%size];
  • 第二种方法

String color = colorArray[id&(size-1)];
  1. 以上两种方法都可以取出所对应颜色

  2. 第一种方法是传统取余

  3. 第二种方法是采用交集方式,位运算,变相取余,效率高,结果等同于求余

  4. 第二种方式是在hashmap源码时看到的:获取数组索引

static int indexFor(int h, int length) {
    // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
    return h & (length-1);
}



个人博客:http://www.whereta.com

© 著作权归作者所有

共有 人打赏支持
清尘V
粉丝 43
博文 107
码字总数 47780
作品 0
青岛
程序员
c语言最容易犯的6个错误

1.书写标识符时,忽略了大小写字母的区别。 编译程序把a和A认为是两个不同的变量名,而显示出错信息。 C认为大写字母和小写字母是两个不同的字符。 习惯上,符号常量名用大写,变量名用小写表...

陌尘_9353
2017/12/12
0
0
C语言基础学习运算符-基本算术运算符

基本算术运算符 C语言中用于基本算术运算的运算符有:+,-,,%,/。这些运算符的用法和你想像到的基本无异: 加法运算符 “+”使得它两侧的值被加到一起。 减法运算符“-”用它前面的数减去...

MayaTeacher
2016/09/14
15
1
游褒禅山记

游褒禅山记 朝代:宋代 作者:王安石 原文:   褒禅山亦谓之华山,唐浮图慧褒始舍于其址,而卒葬之;以故其后名之曰“褒禅”。今所谓慧空禅院者,褒之庐冢也。距其院东五里,所谓华山洞者,...

Betty__
2016/11/11
5
0
《从零开始学Swift》学习笔记(Day 10)——运算符是“ +、-、*、/ ”吗?

原创文章,欢迎转载。转载请注明:关东升的博客 运算符是用于执行程序代码运算,会针对一个或一个以上操作数项目来进行运算。例如:2+3,其操作数是2和3,而运算符则是“+”。那么“+、-、、/...

智捷课堂
2015/09/09
65
0
算法学习之路|逆元取模(一)

好了,今天轻松一点。逆元取模,一个小概念,在做ACM一些题目的时候必须要用到。终于下决心好好看一看了 ! 学习过程中遇到了模幂运算,即先进行幂运算,再进行模运算。转载自百度百科 概念:...

kissjz
02/10
0
0
HashMap的长度为什么要是2的n次方

HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法; 这个算法实际就是取模,hash%length,计算机中直接求余...

xiaomin0322
07/12
0
0
MySQL 中把查询结果输出到文件中

在Mysql中把查询结果输出到文件中,我所经历的故事。 第一步,起始 Mysql 官方文档参考 http://tool.oschina.net/uploads/apidocs/mysql-5.5-en/sql-syntax.html#select-into 我的输入 SELE...

import_key
2016/01/19
721
0
Python 基础练习 PAT水题(三)

#学习笔记 #用以练习python基础 # 原题链接:https://www.patest.cn/contests/pat-b-practise/1039 1039. 到底买不买(20) 小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六...

chaunceyjiang
2017/04/26
0
0
FreeBASIC学习笔记——第03章 运算符与表达式

3.1 赋值运算 FreeBASIC的赋值运算除了“=”以外,还有类似C语言的运算后赋值的操作,具体运算符及其说明如表3-1所示。 表3-1 赋值运算符及说明 3.2 算术运算 算术运算就是加、减、乘、除等运...

rainheart311
2017/12/13
0
0
C语言小白最容易犯的17种错误,你中了吗?

C编译的程序对语法检查并不像其它高级语言那么严格,这就给编程大佬们留下了“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对刚刚接触C语言的人来说,经常会出一些连自...

诸葛玥
2017/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部