将十进制的负数转换为十六进制方法:
本文是对ECMAScript中的基本概念-位操作符的补充。
如:-127
- 先取-127的原码,即-127的绝对值的二进制的表示,127的32位二进制为00000000000000000000000001111111 (对于有符号的整数,前31位表示整数的值,第32位为符号位表示符号,0表示正数,1表示负数。)
- 取原码的反码,为 11111111111111111111111110000000
- 取反码的补码,为 11111111111111111111111110000000 + 1,11111111111111111111111110000001
- 转换为16进制即从后向前,4位为一个单元,1111 1111 1111 1111 1111 1111 1000 0001(8进制3位为一个单元…)
- 得到16进制的值,ffffff81,即为0x81
-127 负的十进制
127 原码
00000000000000000000000001111111 原码的二进制
11111111111111111111111110000000 + 1 反码加一
11111111111111111111111110000001 得到补码
1111 1111 1111 1111 1111 1111 1000 0001 4位为一个单元
ffffff81 得到十六进制表示
反向由十六进制到对应十进制:
0x81 十六进制
ffffff81 十六进制
1111 1111 1111 1111 1111 1111 1000 0001 4位为一个单元
11111111111111111111111110000001 - 1 减一为补码
11111111111111111111111110000000 补码
00000000000000000000000001111111 原码的二进制
1*2**6 + 1*2**5 + 1*2**4 + 1*2**3 + 1*2**2 + 1*2**1 + 1*2**0
= 64+32+16+8+4+2+1 = 127 转换为十进制
-127 高位为1,符号为负