请教2进制取高10位与低6位写法
本帖最后由 cdmmye 于 2023-3-12 17:18 编辑这一段2进制 1011111100010100
取高10位 = 82
低6 = 5311
火山中怎么写,或者有什么模块支持,,请教各位前辈
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊 Xelloss0618 发表于 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊
抱歉那是我写错了
取高10位 = 82
低6 = 5311
十六进制为 BF14 Xelloss0618 发表于 2023-3-12 16:50
这个二进制跟你说的高低位根本对不上,另外 0x3F = 932 ?这肯定是错的啊
倒序16进制也没取对2进制
BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F
这是说的算法,我怎么处理也取不出这样的二进制 也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算是对了,但那也是反转字节序后再取高10位才能得到的值
位或 (位左移 (位与 (数值, 0x00FF), 8), 位右移 (位与 (数值, 0xFF00), 8)) = 5311 = 0x14BF
位右移 (0x14BF, 6) = 82 Xelloss0618 发表于 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算 ...
我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助
Xelloss0618 发表于 2023-3-12 17:49
也不对啊,那个 5311 是 0xBF14 反转字节序得出的值,根本不是低6位(6位二进制的最大值是63)。
高10位算 ...
0xBF14 反转字节序得出的值 你说的是对的,我看了也应该是,百度说的是低6位我看的很糊涂 cdmmye 发表于 2023-3-12 18:49
我也是被搞懵了,百度看的算法就是这么说的,怎么算都不对,所以发帖求助
这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。
取高10位也是正确的, 位右移 (0x14BF, 6)
取低6位就不知道是哪个了,文章我也没看到
Xelloss0618 发表于 2023-3-12 20:41
这图就没毛病了,内存是小端序,所以这个值实际上是 0x14BF,这不需要反转字节序。
取高10位也是正确的, ...
文章就这一句话
先解析开始的 BF 14 ,二进制为 0001 0100 10 @ 11 1111,高10位82,即为DoABC,低6为0x3F,为长类型
不会是文章自身写错了吧,看的很糊涂 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