题:将-617转换成八进制和十六进制数(补码)
犯错:(-617)D=(-1151)O=(-269)H
原因分析:如果是正数的话,上面的思路是正确的,但是由于正数和负数在原码、反码、补码转换上的差别,所以按照正数的求解思路去对负数进行求解是不对的。

正确的方法是:首先将-617用补码表示出来,然后再转换成八进制和十六进制(补码)即可。
注:二进制补码要用16位。
正确答案::(-617)D=(176627)O=(fd97)H

负数十进制转换成八进制或十六进制方法如(-12)10=( )8=( )16
第一步:转换成二进制
   1000 0000 0000 1100
第二步:补码,取反加一              
   1111 1111 1111 0100
第三步:转换成八进制是三位一结合:(177764)8
    转换成十六进制是四位一结合:(fff4)16

  1. #include <stdio.h>  
  2. int main(void)  
  3. {  
  4.     short i=-12;  
  5.     printf("%o %x\n",i,i); //八进制3777 7777 764     十六进制ff ff ff f4  
  6.     return 0;  
  7. }  
  8.