如何计算2的n次方
2023-12-17 09:14:24
今天在写代码的时候,遇到了纹饰评分的计算,纹饰的等级和评分的关系为:
- 1级纹饰:20
- 2级纹饰:40
- 3级纹饰:80
得出纹饰等级grade和纹饰评分score的关系:score = (2 ^ grade) * 10,所以就遇到了要求2的N次方的问题。
我的第一反应是java.util.Math有一个pow(a, b)方法,就是求a ^ b,但是由于很少用这个方法,居然参数是float类型的。(不知道java的作者为什么偷懒,不写几个重载的pow()方法)
于是只能另寻他法了,于是在百度的时候我突然想起了位运算,2是特殊的数字,一个数字要扩大2^N呗,只需要左移N位。
- 2 << 1 = 4
- 2 << 2 = 8
- 2 << 3 = 16
- ......
所以,上面的公式score = (2 ^ grade) * 10可以用java代码实现
int score = (2 << (grade - 1)) * 10;
当然,为了减少一次减法运算,可以再次简化公式:
int score = (1 << grade) * 10;
具体的业务代码为
/*
* 2、纹饰评分
*/
// 统御状态为:1-统御中
if (TongyuState.YTY.getValue().equals(chongwu.getTyStatus())) {
// 根据坐骑ID查询纹饰类型列表
List<WenshiCategory> list = wenshiMapper.selectByZuoqiId(chongwu.getZuoqiId());
if (list.size() > 0) {
// 遍历纹饰类型列表
for (WenshiCategory wenshiCategory : list) {
// 纹饰的评分 = 2^纹饰等级 * 10
score.addAndGet((1 << wenshiCategory.getGrade()) * 10);
}
}
}
好了,文章就分享到这里了,看完如果觉得对你有所帮助,不要忘了点赞+收藏哦~
文章来源:https://blog.csdn.net/heyl163_/article/details/135041206
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!