プログラミング未経験、今月就職し1週間ほどC言語を勉強しています。
研修を受けている会社からの練習問題で6桁までの16進数を入力し、10進数に変えて出力する…という問題が出たのですが、
pow関数というのを見つけそれを使用したところ、「シフト演算(?)を使った方が早い」と言われてしまいました。
C言語で16進数をシフト演算を使用し、10進数に変換したいです。
ヒントを教えていただけないでしょうか。
また、powを使って書いたものは以下になります。
これとはまったく別物になるのでしょうか?
あと、書き方等のアドバイスが有ればお願いします。
研修中に出来るだけ知識をつけたいです。
よろしくおねがいします。
C
1#include<stdio.h> 2#include<math.h> 3#include <string.h> 4 5long HexToBin(char *str) 6{ 7 long tmp; 8 int i; 9 long sum=0; 10 11 for(i=0;i<strlen(str);i++) 12 { 13 if(*(str+i)>='0' && *(str+i)<='9') 14 { 15 tmp=*(str+i)-'0'; 16 sum=(tmp*pow(16,strlen(str)-i-1))+sum; 17 } 18 else if(*(str+i)>='A' && *(str+i)<='F') 19 { 20 tmp=*(str+i)-'A'+10; 21 sum=(tmp*pow(16,strlen(str)-i-1))+sum; 22 } 23 else if(*(str+i)>='a' && *(str+i)<='f') 24 { 25 tmp=*(str+i)-'a'+10; 26 sum=(tmp*pow(16,strlen(str)-i-1))+sum; 27 } 28 else 29 { 30 sum=-1; 31 break; 32 } 33 } 34 return (sum); 35} 36 37int main() 38{ 39 char hex[50]; 40 long dec; 41 42 printf("16進数を入力:"); 43 scanf("%s",&hex[0]); 44 45 dec=HexToBin(&hex[0]); 46 47 if(dec==-1) 48 printf("入力された値が不正です。\n\n"); 49 else 50 printf("結果:%ld\n\n",dec); 51 52 return 0; 53}
*returnの中を書き換え忘れていたので修正しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/13 17:46
2015/08/13 18:27
2015/08/24 22:53 編集
2015/08/21 11:09 編集