当前位置: 首页 > news >正文

算法——整数规格化

1. 介绍

整数规格化的算法是我在阅读 Netty 源码时了解到的,它指的是 将一个整数经过规格化处理,变成大于或等于原数的最小的 2 的幂次方数


2. 代码

public static int normalize(int n) {
    n--;
    n |= n >>> 1;
    n |= n >>> 2;
    n |= n >>> 4;
    n |= n >>> 8;
    n |= n >>> 16;
    n++;
    return n;
}

3. 逐步解释

  • n--:对 n 进行减 1 操作,确保当 n 本身就是 2 的幂次方时,经过后续操作后结果依然是 n
  • n |= n >>> 1:将 n 右移 1 位,然后与原数按位或,从而 把最高位 1 右边的第 1 位也置为 1
  • n |= n >>> 2:将 n 右移 2 位,然后与原数按位或,从而 把最高位 1 右边的第 2, 3 位也置为 1
  • n |= n >>> 4:将 n 右移 4 位,然后与原数按位或,从而 把最高位 1 右边的第 4, 5, 6, 7 位也置为 1
  • n |= n >>> 8:将 n 右移 8 位,然后与原数按位或,从而 把最高位 1 右边的第 8, 9, ..., 15 位也置为 1
  • n |= n >>> 16:将 n 右移 4 位,然后与原数按位或,从而 把最高位 1 右边的第 16, 17, ..., 31 位也置为 1
  • n++:经过前面的操作,n 二进制表示中最高位 1 及其右边的所有位都为 1。此时加 1 操作会 n 变成大于或等于原始 n 的最小的 2 的幂次方数

4. 演示

4.1 情况一:n 不是 2 的幂次方

对于二进制数 0b0100_1000(只演示 8 位,更高位数以此类推),它的规格化流程如下:

原数:				0100 1000
n-- 后:				0100 0111
n |= n >>> 1后:		0110 0111
n |= n >>> 2后:		0111 1111
n |= n >>> 4后:		0111 1111
n |= n >>> 8后:		0111 1111
n |= n >>> 16后:	0111 1111
n++ 后:				1000 0000

4.2 情况二:n 是 2 的幂次方

对于二进制数 0b0100_0000,它的规格化流程如下:

原数:				0100 0000
n-- 后:				0011 1111
n |= n >>> 1后:		0011 1111
n |= n >>> 2后:		0011 1111
n |= n >>> 4后:		0011 1111
n |= n >>> 8后:		0011 1111
n |= n >>> 16后:	0011 1111
n++ 后:				0100 0000

5. 总结

整数规格化可以使用本文讲解的算法,它的时间复杂度和空间复杂度都是 O ( 1 ) O(1) O(1),而且所有操作都是位运算,性能很高。它可能会应用于内存偏移量计算的场景。

相关文章:

  • 需求分析-用例图绘制、流程图绘制
  • 在Hive中,将数据从一个表查询并插入到另一个表
  • pulsar中的延迟队列使用详解
  • Golang系列 - 内存对齐
  • Linux中用gdb查看coredump文件
  • eprime相嵌模式实验设计
  • 【Linux内核】如何更加优雅阅读Linux内核源码(vscode)
  • Seata TCC模式是怎么实现的?
  • 国内外AI大模型汇总合集-文本类
  • NLP 梳理01 — 文本预处理和分词
  • 软件测试的本质:方法、流程与未来趋势
  • Cocos Creator 进行 Web 发布后,目录结构解析
  • AIP-215 API特定proto
  • 【MySQL基础】MySQL内连接(INNER JOIN)详解:高效关联查询的基础
  • 数字人:从科幻走向现实的未来(1/10)
  • 11-产品经理-创建产品
  • ProfibusDP(主站)如何转Profinet
  • 【图像处理基石】什么是自动曝光(AE)?
  • AtCoder Beginner Contest 400(ABCDE)
  • 虚拟机安装遇到的问题如:Exception 0xc0000005
  • 同程网 网站模板/互联网营销师考试题库
  • 衡阳市网站建设/广州seo排名优化
  • 中山市做网站公司/网站优化与seo
  • 北京建设工程建设交易信息网站/网站源码
  • 阿里巴巴网页版/搜索引擎推广seo
  • iis网站属性里/google下载手机版