cdmmye 发表于 2023-3-12 16:14:21

请教2进制取高10位与低6位写法

本帖最后由 cdmmye 于 2023-3-12 17:18 编辑

这一段2进制 1011111100010100

取高10位 = 82

低6 = 5311


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

Xelloss0618 发表于 2023-3-12 16:50:05

这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊

cdmmye 发表于 2023-3-12 17:19:16

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

抱歉那是我写错了

取高10位 = 82

低6 = 5311

十六进制为 BF14

cdmmye 发表于 2023-3-12 17:23:40

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:17

也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算是对了,但那也是反转字节序后再取高10位才能得到的值

位或 (位左移 (位与 (数值, 0x00FF), 8), 位右移 (位与 (数值, 0xFF00), 8)) = 5311 = 0x14BF
位右移 (0x14BF, 6) = 82

cdmmye 发表于 2023-3-12 18:49:31

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

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


cdmmye 发表于 2023-3-12 18:51:42

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

0xBF14 反转字节序得出的值 你说的是对的,我看了也应该是,百度说的是低6位我看的很糊涂

Xelloss0618 发表于 2023-3-12 20:41:30

cdmmye 发表于 2023-3-12 18:49
我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助




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

cdmmye 发表于 2023-3-12 20:49:16

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:24

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位的值
页: [1] 2
查看完整版本: 请教2进制取高10位与低6位写法