使用负数限制 Excel DEC2HEX 中的前导 F?

使用负数限制 Excel DEC2HEX 中的前导 F?

我想将十进制数转换为 8 位 2 的补码十六进制。

  • 当我这样做时,DEC2HEX(1,2)我得到的01是完美的。
  • 当我这样做时,DEC2HEX(-1,2)我得到的FFFFFFFFFF实在太多了。

如何DEC2HEX(-1,2)将 的输出限制为FF

答案1

根据Excel 的文档

如果数字为负数,places则被忽略DEC2HEX返回一个 10 个字符(40 位)的十六进制数,其中最高有效位是符号位。其余 39 位是数值位。负数使用二进制补码表示。

所以你必须自己截断该值

=RIGHT(DEC2HEX(-1, 2), 2)

或者

=DEC2HEX(IF(A1 < 0, A1 + 256, A1), 2)

另一个解决方案是

=DEC2HEX(BITAND(A1 + 256, 255), 2)

+ 256部分用于将负值转换为其 2 的补码。这仅适用于 8 位数字。对于任意 n 位 2 的补码数字,您需要使用+ 2^n

相关内容