C++面接問題の進数変換の例

1954 ワード

C++進数変換の例
 つの面接試験問題は、10進数を入力して、16進数を出力して、printfを使って%dを印刷することができて、%c、%sは出力に来て、しかし%xを使って印刷することができません。
    二つのアルゴリズムを書いたが、まだ比較的簡潔で、ここに貼り付けます。        

//      ,          ,          ,        
 
#include <stdio.h> 
 
#define MAX_HEX_NUM 16 
#define OUT_DATA_LEN sizeof(int)*2 // 2 16     1   
 
static char Hex_Char_Table[MAX_HEX_NUM] = { 
  '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' 
}; 
 
int ten2hex( int data ) 
{ 
  char result[OUT_DATA_LEN+1]; 
  int i,index; 
 
  result[OUT_DATA_LEN] = '\0'; 
  for( i=OUT_DATA_LEN-1; i>=0; i-- ) 
  { 
    index = data & 0xf; 
    result[i] = Hex_Char_Table[index]; 
    data = data>>4; 
  } 
 
  printf("0x%s
",result); return 0; }
    以下は第二のアルゴリズムで、上位から下位へスキャンし、結果を直接印刷します。

#include <stdio.h> 
 
#define BITS_OF_INT  sizeof(int)*8 // int    
#define OUT_DATA_LEN sizeof(int)*2 // 2 16     1    
 
int printHex( int num ) 
{ 
  int i; 
 
  printf("0x"); 
  for(i=0;i<OUT_DATA_LEN;i++) 
  { 
    unsigned int res = num & 0xf0000000; //  ,    unsigned int   ,                
    res = res >> (BITS_OF_INT-4); 
    char c; 
    if( res <= 9 ) 
      c = res + '0'; 
    else 
      c = 'A' + res - 10; 
 
    printf("%c",c); 
 
    num = num << 4; 
  } 
 
  printf("
"); }
    二つのアルゴリズムは実はシフト方式で演算しています。除算ではなく、もっと効率的にできます。このテーマのポイントもここにあると思います。
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。