C++面接問題の進数変換の例
C++進数変換の例
つの面接試験問題は、10進数を入力して、16進数を出力して、printfを使って%dを印刷することができて、%c、%sは出力に来て、しかし%xを使って印刷することができません。
二つのアルゴリズムを書いたが、まだ比較的簡潔で、ここに貼り付けます。
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。
つの面接試験問題は、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("
");
}
二つのアルゴリズムは実はシフト方式で演算しています。除算ではなく、もっと効率的にできます。このテーマのポイントもここにあると思います。疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。