ビット演算を用いた基数変換について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
outhuk

ビット演算を用いた基数変換について

#1

投稿記事 by outhuk » 5年前

高校3年生です。c言語を学んでいます。疑問点があったので質問させていただきます。
現在、実現したい仕様は以下の通りです。
コマンドライン引数から整数を受け取り、ビット演算を用いてその値を2進数として標準出力する。
<補足>
コマンドラインから出力する長さと2進数出力する整数をうけとる。
出力する長さは1~4byteとする。
出力する長さと2進数出力する整数は、sscanfを用いて変数に代入する。
各bitごとの値を格納する配列bitのサイズは出力する長さから計算し、calloc()を用いて動的確保を行う。
<実行例(完成したとき)>

コード:

./test3
  Usage: program <Length(byte)> <Integer number>
./test3 1 43
  00101011
./test3 2 53018
  11001111 00011010
./test3 4 987654321
  00111010 11011110 01101000 10110001
<自分実現できていること>
10進数の値を2進数に変換する関数の作成

コード:

void cv2bin(unsigned char n){
        int i;
        for(i=DIGITS-1;i>=0;i--){
                printf("%d",(n>>i)&1);
        }
        printf("\n");
}
int main(int argc,char*argv[]){

if(argc!=3){
printf("Usage: program <Length(byte)> <Integer number>\n");
exit(1);
}

unsigned char n;
cv2bin(n);//2進数に変換

return 0;
}
<疑問点>
関数cv2binはきちんとビット演算を用いているといえるでしょうか?
コマンドライン引数からの2つの値を'unsigned n'にsscanfを用いて代入するにはどうすればよいでしょうか?

maru
記事: 150
登録日時: 13年前

Re: ビット演算を用いた基数変換について

#2

投稿記事 by maru » 5年前

outhuk さんが書きました:
5年前
<疑問点>
関数cv2binはきちんとビット演算を用いているといえるでしょうか?
コマンドライン引数からの2つの値を'unsigned n'にsscanfを用いて代入するにはどうすればよいでしょうか?
&演算子はビット演算なので、一応要件を満たしているでしょう。
コマンドライン引数は argc に引数の数、argv に引数文字列へのポインタ配列として main関数に渡されます。
(ただし argv[0] は実行コマンドそのもの)
この問題では Length(byte) 文字列へのポインタが argv[1] に入っていて、Integer number 文字列へのポインタが argv[2] に入っています。

かずま

Re: ビット演算を用いた基数変換について

#3

投稿記事 by かずま » 5年前

outhuk さんが書きました:
5年前
コマンドライン引数からの2つの値を'unsigned n'にsscanfを用いて代入するにはどうすればよいでしょうか?
次のコードの sscanf のところだけを参考にしてください。

コード:

#include <stdio.h> // putchar, puts, sscanf

int main(int argc, char *argv[])
{
	unsigned i, n;
	if (argc != 3)
		return puts("Usage: program <Length(byte)> <Integer number>"), 1;
	sscanf(argv[1], "%u", &i), sscanf(argv[2], "%u", &n);
	for (putchar(' '), i <<= 3; i > 0; putchar(n >> i & 1 | '0'))
		i-- & 7 || putchar(' ');
	putchar('\n');
	return 0;
}
calloc を使っていないので、これは問題の解答ではありません。
sscanf の後の処理は参考にせず、自分で cv2bin を書いて完成させてください。

返信

“C言語何でも質問掲示板” へ戻る