You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

算术压缩中high补1、low补0的实现逻辑疑问

算术编码移位补位操作的两个疑问解答

疑问1:为啥把1移入high的最低位而不是0?

就是为了最大化high的取值,核心是维持算术编码区间的精度,避免过早丢失有效范围。

算术编码里我们用整数区间[low, high)来近似模拟连续的概率区间[0,1)。当触发移位操作(比如low和high最高位相同,需要输出该位并压缩区间),左移high后补1,是为了让high始终保持当前能表示的最大上限——毕竟high是区间的上边界,补1能让它尽可能贴近1的边界,防止区间宽度过早缩小导致精度不够。举个8位整数的例子:初始high是0xFF,左移一位后补1,得到的新high依然是当前范围内的最大可能值,这样后续划分概率区间时才有足够的空间,不会因为上限被压低而出错。

疑问2:作者说0被移入low的最低位,但代码里没显式写,怎么保证low最低位是0?

这是因为绝大多数编程语言的左移操作默认会在最低位补0(比如C里的无符号整数<<操作),作者说的“移入0”其实是靠这个语言特性实现的,根本不需要额外写代码。

从算法逻辑来讲,low是区间的下边界,左移后补0是为了维持下界的最小化特性,保证区间划分正确。你看原代码里的low <<= 1,执行这句时,low的二进制位左移一位,右边空出来的最低位会自动填0,完全符合算法要求,所以没必要显式写补0的代码。


内容的提问来源于stack exchange,提问作者web4141

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:50:16