JavaScript 与 ASP(VBScript)将负数转换成十六进制的不同点

作者:vkvi 来源:ITPOW(原创) 日期:2009-4-27

  • JavaScript 用 toString(16) 将十进制转换成十六进制。
  • ASP(VBScript)用 Hex 将十进制转换成十六进制。

二者在正数表现上无实质区别,只是一个是小写,一个是大写;但对待负数就有区别了。

JavaScript 结果是在负数绝对值的十六进制前加负号。

var n = -10;
alert(n.toString(16)); // 结果为 -a,注意是小写。

ASP(VBScript)将补码看作是无符号的十六进制。

alert(hex(-10)) ' 结果为 FFF6,注意是大写。

10 的字节是 0000 0000 0000 1010,负数用补码表示,那么它的补码是:

  1. 符号位为 1:1000 0000 0000 1010
  2. 其他位为该数绝对值原码按位取反:1111 1111 1111 0101
  3. 加 1:1111 1111 1111 0110

而 1111 1111 1111 0110 对应于十六进制就是 FFF6。

如何让 JavaScript 的表现和 ASP(VBScript)相同呢?

var m = -10 + 65535 + 1;
alert(m.toString(16)); // 结果为 fff6,注意是小写。
相关文章