二進数に変換
Posted: 2007年3月13日(火) 15:41
下のソースの二進数に関数を一般的なのもに書き換えたいのですが、書き方が解りません。
9文字以内を無視する仕様になっていますが何桁でも入力できるように直したいです。
0~256の範囲の整数で'0'~'9'以外の文字が入力されたらエラーになる仕様ですが
if(dec >= 0 && dec <=255)と書いたのに255以上も処理されてしまいます。
どなたか分かる方教えていただけると助かります。よろしくお願いします。
9文字以内を無視する仕様になっていますが何桁でも入力できるように直したいです。
0~256の範囲の整数で'0'~'9'以外の文字が入力されたらエラーになる仕様ですが
if(dec >= 0 && dec <=255)と書いたのに255以上も処理されてしまいます。
どなたか分かる方教えていただけると助かります。よろしくお願いします。
#include <stdio.h>
void main(){
int data[1] = {0};
int i= 0;
int ch;
int cnt;
unsigned char dec;
char *print_bin(unsigned int);
printf("数値入力:");
while( (ch = getchar()) != '\n' ){ // 1件分の入力処理
if( i < 9 ){ // 9桁までを有効
if( ch >= '0' && ch <= '9' ){ // 数字文字
data[cnt] = data[cnt] * 10 + ch - '0';
}
else{
printf("Error!!:数字文字以外の入力\n");
return;
}
i++;
}
}
if( i == 0 ){ // 改行のみの入力
printf("Error!!:改行のみの入力\n");
return;
}
dec = data[0];
if(dec >= 0 && dec <=255){ //0-255の文字
printf("dec=%d hex=%x bin=%s\n", dec,dec,print_bin( dec ));
dec = dec >> 1;
printf("右に1ビットシフトdec=%d hex=%x bin=%s\n",dec,dec,print_bin( dec ));
dec = dec << 1;
printf("左に1ビットシフトdec=%d hex=%x bin=%s\n",dec,dec,print_bin( dec ));
dec = ~dec;
printf("全ビット反転dec=%#d hex=%#x bin=%s\n",dec,dec,print_bin( dec ));
}
else{
printf("Error!!:0-255以外の入力\n");
}
}
char *print_bin( unsigned int x ){
static char out[10];
unsigned int n, i, j;
n = 1<<7;
j = 0;
for( i=0; i<8; i++ ){
if( x&(n>>i) )
out[j]='1';
else
out[j]='0';
j++;
if( i%4==3 ){
out[j]=',';
j++;
}
}
out[j-1] = '\0';
return out;
}