C++進制轉換的實例
一個面試題,要求輸入十進制數,輸出十六進制,可以使用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/n",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("/n"); }
兩種算法其實都是采用移位的方式來運算,而不是采用除法,這樣會更加高效一些,我想這個題目的考點應該也在這里吧。
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答