数据为4个字节的16进制ASC2码,既为2个字节的二进制数,且为补码表示(最高位为符号位,负数的绝对值为补码取反加1,正数为它本身2字节)且数据高字节位在前,低字节位在后。
我想知道,我得到这条数据以后,如果它表示的是负数,我怎么得到它的10进制表示?

解决方案 »

  1.   

    将这个补码再求一次补,就得到他的原码了!
    比如这个数据为 E 3 B F 3 7 4 B
    那么用二进制表示为: 1110 0011 1011 1111 0011 0111 0100 1011
    取反得到:          1001 1100 0100 0000 1100 1000 1011 0100
    加一得:            1001 1100 0100 0000 1100 1000 1011 0101
    即:             -    1   C    4    0    C    8    B    5
    9 C 4 0 C 8 B 5 为其原码!       
      

  2.   

    TO hujianlinsoft(深蓝) :THANK U
      比如我得到的数据为00D7 1、我在程序中怎么判断它是正数还是负数? 
     2、如果它是负数,我在程序中怎么得到它的绝对值,比如实际的数为-21。我怎么得到这个21?
      

  3.   

    TO : wxj81 :delphi中
      

  4.   

    fabs 是求绝对值,和其他的语言一样的判断是正是负啊!
      

  5.   

    机器数一般用最高有效位表示数的符号,0表示正,1表示负。
    你将16进制数转换为2进制数就可以看出正负了。
    除去最高符号位,然后用BCD码就可以将十六进制数转换为十进制数了