当前位置:网站首页>位级运算之提取位级表示的最高位
位级运算之提取位级表示的最高位
2022-08-03 13:34:00 【Once_day】
位级运算之提取位级表示的最高位
Author:Once day Date:2022年7月31日
漫漫长路刚刚开始,不要甘于平凡。
本算法基于C语言环境。
1.引言
可以只依靠基本的位级运算来提取位级表示的最高位。
如值0xFF00,返回0x8000,值0x6600,返回0x4000。
简单的处理是从最高位向右依次判断,不过存在一种无需判断,且复杂度为对数级别的方法。
2.实现
假设一共32位,即0x00707000,看成32位的向量 b 31 b n 30 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ b 1 b 0 b_{31}bn_{30}······b_1b_0 b31bn30⋅⋅⋅⋅⋅⋅b1b0。
那么可以将其分成两部分,利用折半查找的思想,即 u 1 = b 31 b 30 ⋅ ⋅ ⋅ b 17 b 16 u_1=b_{31}b_{30}···b_{17}b_{16} u1=b31b30⋅⋅⋅b17b16和 u 2 = b 15 b 14 ⋅ ⋅ ⋅ b 1 b 0 u_2=b_{15}b_{14}···b_{1}b_{0} u2=b15b14⋅⋅⋅b1b0。
直接进行与运算,判断u1和u2里是否含有1:
unsigned x=0x00707000;
x=(x&0xffff0000)||(x&0x0000ffff);
根据与运算符的规则,如果最高位1在 u 1 u_1 u1, 那么x的值为x&0xffff0000
,所有 u 2 u_2 u2部分值都会被抹去。反之,x的值为x&0x0000ffff
,所有 u 1 u_1 u1部分值都会被抹去。
因此其值变为0x00700000。此时再折半判断:
- 若u1包含最高位1,则在 u 11 = b 31 b 30 ⋅ ⋅ ⋅ b 25 b 24 u_{11}=b_{31}b_{30}···b_{25}b_{24} u11=b31b30⋅⋅⋅b25b24和 u 12 = b 23 b 22 ⋅ ⋅ ⋅ b 17 b 16 u_{12}=b_{23}b_{22}···b_{17}b_{16} u12=b23b22⋅⋅⋅b17b16里判断。
- 若u2包含最高位1,则在 u 21 = b 15 b 14 ⋅ ⋅ ⋅ b 9 b 8 u_{21}=b_{15}b_{14}···b_{9}b_{8} u21=b15b14⋅⋅⋅b9b8和 u 12 = b 7 b 6 ⋅ ⋅ ⋅ b 1 b 0 u_{12}=b_{7}b_{6}···b_{1}b_{0} u12=b7b6⋅⋅⋅b1b0里判断。
这两种情况实际上使互斥的,即 u 11 u_{11} u11和 u 12 u_{12} u12会同时有可能,但 u 11 u_{11} u11和 u 21 u_{21} u21不可能同时发生。
因此合并成两种判断情况:
- 最高位在 u 11 u_{11} u11或 u 21 u_{21} u21,此时
x&(0xff00ff00)
。 - 最高位在 u 12 u_{12} u12或 u 22 u_{22} u22,此时
x&(0x00ff00ff)
。
以此类推,则可表示为:
unsigned x=0x00707000;
x=(x&0xffff0000)||(x&0x0000ffff);
x=(x&0xff00ff00)||(x&0x00ff00ff);
x=(x&0xf0f0f0f0)||(x&0x0f0f0f0f);
x=(x&0xbbbbbbbb)||(x&0x33333333);
x=(x&0xaaaaaaaa)||(x&0x55555555);
其复杂度为 l o g 2 w log_2w log2w,w为位级表示的位数。
完…
边栏推荐
猜你喜欢
[OpenCV] Book view correction + advertising screen switching Perspective transformation image processing
An introduction to the width tool, deformation tool and lasso tool
客户:我们系统太多,能不能实现多账号互通?
[Microservice] Multi-level cache
HCIP Day 16 Notes (SVI, Spanning Tree Protocol)
365天挑战LeetCode1000题——Day 048 有序队列 脑筋急转弯
Nanoprobes FluoroNanogold 偶联物的特色和应用
Yahoo!Answers - data set
设计思维 | 详看设计工作坊Workshop的11个关键技巧
GameFi industry down but not out | June Report
随机推荐
Postman插件下载
HCIP Day 16 Notes (SVI, Spanning Tree Protocol)
BOM系列之sessionStorage
[R] Use grafify for statistical plotting, ANOVA, intervention comparisons, and more!
Nanoprobes金脂质偶联物的相关应用
The Chinese Embassy in Nigeria issued an emergency safety warning for the area near Zuma Rock in Abuja
Nanoprobes Ni-NTA-Nanogold——用于 His 标签标记和检测
Golang GMP principle
北斗三号系统建成开通两周年:基础设施端核心技术已实现自主可控
OpenHarmony高校技术俱乐部计划发布
Forrester:行业云帮助中国企业更快适应未来的发展
tinymce 如何实现动态国际化
PyTorch builds a neural network to predict temperature (dataset comparison, CPU vs GPU comparison)
Redis connection pool tool class
PyTorch构建分类网络模型(Mnist数据集,全连接神经网络)
PyTorch builds a classification network model (Mnist dataset, fully connected neural network)
d作者:d的新特性
“芯片法案”通过后,美光承诺在美国扩产
petri网-1、概论
华云数据张华林:投身数字蓝海 绘就云上强国