我想将十进制数转换为 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