十六进制数据转换十进制时区别正负值(Python)

一、当我们使用Python进行十六进制数据转换十进制数据时,因为可能存在有符号情况下正负值的问题,所以在转换时要特别留意加以区分。

  • 1、单字节(无符号):0到255;(有符号):-128到127。
  • 2、双字节(无符号):0到65535;(有符号):-32768到32765。
  • 3、四字节(无符号):0到4294967295;(有符号):-2147483648到2147483647。

  无符号:从0000 0000(0)到1111 1111(2^8-1=255)。

  有符号:有一位表示符号位(1表示负,0表示正)正数从0 000 0000(0)到 0 111 1111(2^7-1=127,第一位0表示正)。负数:从1 000 0000到1 111 1111(-(2^7-1)=-127)。

  负数在计算机中用补码表示-0的补码为0000 0000与+0的表示一致,所以用0000 0000表示+0和-0。所以1 000 0000不表示-0而表示-128。

 

二、在实际使用的过程中,负数直接就是一个十六进制数,并没有带符号,以单字节举例:

  实际的单字节十六进制有符号情况下,最大值是在7F,所以当单字节十六进制数大于7F时,便是负值。这时按照 0xFF - x + 0x01 的计算公式,将其转换为十进制数值。

  例:

 1 # 正数
 2 a  = 0x64
 3 print("0x64的正十进制:" + a)
 4 
 5 #
 6 b = 0x9C
 7 b = 0xFF - b + 0x01
 8 print("0x9C的负十进制:" + b)
 9 
10 #输出
11 #0x64的正十进制:100
12 #0x9C的负十进制:-100

 

posted @ 2022-07-27 19:33  缓下脚步  阅读(2419)  评论(0编辑  收藏  举报