bit-manipulation - 如何反转移位和加法
问题描述
1E 1B 01 13 6 [ 0001 1110 0001 1011 0000 0001 0001 0011 0110 ]通过筛选和加法转换为F6C336。(0x1E<<19)+(0x1B<<14)+(0x01<<9)+(0x13<<4)+6 = F6C336[1111 0110 1100 0011 0011 0110]
现在,我不得不扭转这个计算。即从F6C336,我想得到1E 1B 01 13 6。
对不起,我对位操作的了解不足。
解决方案
如果这些是每个 5 位的四个块和一个每个 4 位的块,那么“转换”就是它们的串联,而相反的是将它分成这些块。例如:
piece0 = x >> 19;
piece1 = (x >> 14) & 31;
piece2 = (x >> 9) & 31;
piece3 = (x >> 4) & 31;
piece4 = x & 15;
此处以 Java 显示,但逻辑在大多数语言中是相似的。
如果输入不是那种形式,例如,如果是,FF FF FF FF F
那么逆是模棱两可的。
推荐阅读
- ios - 如何获取代码覆盖率信息?
- facebook - 如何在 Facebook Messaging API 中将消息设置为已读?(欧洲)
- python - Django REST 框架 TokenAuthentication 返回匿名用户
- automation - 如何使用带有脚本的模板自动进行视频编辑?
- c - 'gcc' 不是内部或外部命令、可运行程序或批处理文件。: C on VS
- javascript - flexbox 内的项目不可交互
- python-3.x - Django 将动态字段添加到前端,然后将其插入到模型中
- flutter - Flutter 全局定义按钮样式
- perl - perl 字符串到日期时间转换
- r - 如何用geom_rect在ggplot中填充geom_line图下方的区域?