ここから本文です

回答受付中の質問

知恵コレに追加する

C言語プログラムについて質問です。

u_f_o_pechanさん

C言語プログラムについて質問です。

入力した〜255までの数値(unsigned int-型の10進数)を16進数で表示するプログラムで>>
#include <stdio.h>

void print16(unsigned int x)
{
if(x<=9){
printf("%d",x);
}

else {
switch(x) {

case 10: printf("A"); break;
case 11: printf("B"); break;
case 12: printf("C"); break;
case 13: printf("D"); break;
case 14: printf("E"); break;
case 15: printf("F"); break;
}
}
}

int main()
{

unsigned int x,keta0,keta1;

printf("1~255までの数字: ");
scanf("%d",&x);

keta0=x/16;
keta1=x%16;

printf("%d= ",x);
print16(keta0);
print16(keta1);
printf("\n");
}
と言うのは自分で作れたのですがこれをより大きな整数に対応できるように拡張したいのですが。。
どうしたらいいでしょうか?教えて下さい><。お願いします

  • アバター

違反報告

この質問に回答する

回答

2件中12件)
並べ替え:回答日時の
新しい順
古い順

 

end_nikudangoさん

//再帰、ビット演算を用いるとこんな感じです。

#include <stdio.h>
#include <limits.h>

void kprint16(unsigned int n){
int w,x;
w=n>>4; // n/16と同じです。
x=n&15; // n%16と同じです。
if(w>0){kprint16(w);} // 再帰呼出し。(上の桁から処理するため、表示より前です。)
putchar(x<=9?'0'+x:'A'+x-10); // 表示。('A'の文字コード忘れました。)
}
int main()
{

unsigned int x;

printf("0~%uまでの数字: ",UINT_MAX);
scanf("%u",&x); // unsigned int なので%u

printf("%u= ",x); // unsigned int なので%u
kprint16(x);
printf("\n");
}
// 分かりにくいです?さーせん
// 動かなかったら、さーせん

  • アバター

rhinosugarさん

/*
%X_出力指定子で、16進表示出力ができる事は
御存知ですよね。
それはそれとして、自分で少しいじってみよ
ということですか?
それなら結構なのです。差出口で失礼しました。
*/

#include_<stdio.h>
#include_<limits.h>

int_main(){
__unsigned_int____x;

__printf("16進1桁\n");
__for(x=0;x<16;x++)_{
____printf("%2d_=_%X\n",x,x);
__}
__printf("もっと大きな数字\n");
__for(x=16;x<=256*256;x*=16)_{
____printf("%5d_=_%X\n",x,x);
__}
__printf("符合つき、符号なし最大\n");
__printf("%d_=_%X\n",INT_MAX,INT_MAX);
__printf("%u_=_%X\n",UINT_MAX,UINT_MAX);
__return_0;
}
/*_出力:
16進1桁
_0_=_0
_1_=_1
_2_=_2
_3_=_3
_4_=_4
_5_=_5
_6_=_6
_7_=_7
_8_=_8
_9_=_9
10_=_A
11_=_B
12_=_C
13_=_D
14_=_E
15_=_F
もっと大きな数字
___16_=_10
__256_=_100
_4096_=_1000
65536_=_10000
符合つき、符号なし最
2147483647_=_7FFFFFFF
4294967295_=_FFFFFFFF
*/

  • アバター
  • 違反報告
  • 編集日時:2009/10/31 05:30:43
  • 回答日時:2009/10/31 05:23:25

この質問に回答する

話題のキーワード

[カテゴリ:C言語関連]