阅读 76

十进制的负数和十六进制间相互转换

将十进制的负数转换为十六进制方法:

本文是对ECMAScript中的基本概念-位操作符的补充。

如:-127

  1. 先取-127的原码,即-127的绝对值的二进制的表示,127的32位二进制为00000000000000000000000001111111 (对于有符号的整数,前31位表示整数的值,第32位为符号位表示符号,0表示正数,1表示负数。)
  2. 取原码的反码,为 11111111111111111111111110000000
  3. 取反码的补码,为 11111111111111111111111110000000 + 1,11111111111111111111111110000001
  4. 转换为16进制即从后向前,4位为一个单元,1111 1111 1111 1111 1111 1111 1000 0001(8进制3位为一个单元…)
  5. 得到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,符号为负
复制代码
文章分类
前端
文章标签