关于VK_FORMAT_R16G16_S10_5_NV格式是否为2补码及-1.5表示的技术问询
VK_FORMAT_R16G16_S10_5_NV 编码方式说明
VK_FORMAT_R16G16_S10_5_NV采用的是**符号-数值(Sign-Magnitude)**表示,而非2补码形式,具体依据和示例如下:
规范依据
VK_FORMAT_R16G16_S10_5_NV是一种双分量定点格式,最高位为符号位,接下来10位为整数值,最后5位为小数值。
从规范描述能明确,该格式的结构是独立拆分的三部分:符号位仅负责标识正负,整数位和小数位存储的是数值的绝对值,不存在补码的编码逻辑。
示例验证:-1.5的编码
对于-1.5来说:
- 正数1.5的编码:符号位为0,整数部分1对应二进制
0000000001,小数部分0.5对应5位二进制10000(即十进制16,因为2^-1=0.5)。 - 负数-1.5仅需将符号位设为1,整数和小数部分保持正数的绝对值编码不变,最终二进制为:
0b1'0000000001'10000,也就是你给出的第一个选项。
而你提到的第二个选项0b1'1111111110'10000是基于2补码的思路,但该格式并不采用补码规则,因此这个表述是错误的。
内容的提问来源于stack exchange,提问作者Pal Szasz
相关产品推荐
相关产品推荐

