递归火山软件开发平台

标题: 请教2进制取高10位与低6位写法 [打印本页]

作者: cdmmye    时间: 2023-3-12 16:14
标题: 请教2进制取高10位与低6位写法
本帖最后由 cdmmye 于 2023-3-12 17:18 编辑

这一段2进制 1011111100010100

取高10位 = 82

低6 = 5311


火山中怎么写,或者有什么模块支持,,请教各位前辈

作者: Xelloss0618    时间: 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊
作者: cdmmye    时间: 2023-3-12 17:19
Xelloss0618 发表于 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊

抱歉那是我写错了

取高10位 = 82

低6 = 5311

十六进制为 BF14
作者: cdmmye    时间: 2023-3-12 17:23
Xelloss0618 发表于 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊

倒序16进制也没取对2进制

BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F

这是说的算法,我怎么处理也取不出这样的二进制
作者: Xelloss0618    时间: 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算是对了,但那也是反转字节序后再取高10位才能得到的值

位或 (位左移 (位与 (数值, 0x00FF), 8), 位右移 (位与 (数值, 0xFF00), 8)) = 5311 = 0x14BF
位右移 (0x14BF, 6) = 82
作者: cdmmye    时间: 2023-3-12 18:49
Xelloss0618 发表于 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算 ...

我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助

(, 下载次数: 43)

作者: cdmmye    时间: 2023-3-12 18:51
Xelloss0618 发表于 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算 ...

0xBF14 反转字节序得出的值 你说的是对的,我看了也应该是,百度说的是低6位我看的很糊涂
作者: Xelloss0618    时间: 2023-3-12 20:41
cdmmye 发表于 2023-3-12 18:49
我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助

这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。
取高10位也是正确的, 位右移 (0x14BF, 6)
取低6位就不知道是哪个了,文章我也没看到

作者: cdmmye    时间: 2023-3-12 20:49
Xelloss0618 发表于 2023-3-12 20:41
这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。
取高10位也是正确的, ...

文章就这一句话

先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F,为长类型

不会是文章自身写错了吧,看的很糊涂
作者: Xelloss0618    时间: 2023-3-12 23:03
cdmmye 发表于 2023-3-12 20:49
文章就这一句话

先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3 ...

呃,没写错啊,看了一下文章,这是一个短整数,高10位表示长度,低6位始终为0x3F,
这个值是这样计算的,比如长度是82,那就是:
位或 (位左移 (82, 6), 0x3F) = 0x14BF
由于内存是小端序,它会显示成 BF 14,这个你不用理会。

所以这个算法里,你只需要取高10位,知道长度就行了。
取高10位: 位右移动 (0x14BF, 6)  // 16位二进制,向左移动6位,剩下就是10位二进制的值了
取低6位也简单: 位与 (0x14BF, 0x003F)  // 低6位的最大值就是0x3F,与这个值位与,就能获取底6位的值
作者: cdmmye    时间: 2023-3-13 09:20
Xelloss0618 发表于 2023-3-12 23:03
呃,没写错啊,看了一下文章,这是一个短整数,高10位表示长度,低6位始终为0x3F,
这个值是这样计算的, ...

嗯明白了谢谢




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4