学校で出た以下の問題の穴埋めが分かりません。先生曰く今回の課題はかなり難しいとの事だったのですが、、、案の定難しくてさっぱりでした。
みなさまどうか力をお貸しください。
unsigned short int型(16bit整数)の変数を引数として受け取り, 2進数を印字する関数
void print_short2binary(unsigned short);
を作成せよ.様々な値をテストするテスト用main()も作れ. テスト用を行うときの文字定義(コンパイルスイッチ)は"TEST"とせよ
【ヒント:以下のプログラムの足らない部分を埋めなさい】
#include <stdio.h>
void print_short2binary(unsigned short si)
{
for(int i=....
printf("%d", ....);
if(!(i%4)) // 見やすくするために4桁毎にスペースを入れる
printf(" ");
}
printf("\n");
}
#if defined(TEST)
int main(void)
{
print_short2binary(0x1234);
print_short2binary(0x1248);
print_short2binary(0x8421);
print_short2binary(0xAAAA);
print_short2binary(0x5555);
}
#endif
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
とりあえず、「 ... 」部分を補えという問題なんですよね。
1つ目の... は 16;i--;){
2つ目の... は 0 != (si & (1 <<i)) );
でOKかと。
No.7
- 回答日時:
皆さん質問内容につられているようですが、print_short2binary()の入力は「16進数(で表記された文字列)」ではなくて「(ソースが16進数で表記された)16bit整数」ですよ。
私が作るなら、先にマスクを定数で作っておいて、ANDを取るかな…
あとはforで回すなら、その定数を配列に入れておく位で。
元のソースだとスペースが1個変な位置に入るのを気にしなければ、ほとんど考える所はないはず。
No2さん、No.6さんの言う通り、自分で考えて答えを出す事が重要かと思います。
No.6
- 回答日時:
No2さんの余談、同意見です。
自分で考えて答えを出さないと根本的な「解決」にはならないと私も思います。
出題者の想定した回答とは違うと思いますが、こんな回答もありということで
別解、考えてみました。
>以下のプログラムの足らない部分を埋めなさい
とあるので、足らないところは、どこに何行でも挿入してもいいのですよね。
16桁分の文字列の領域を確保し、
偶数なら0、奇数なら1をそこに書き出すという関数を定義して、
その関数を使って、
下の桁から16回繰り返し文字列を埋めて、
逆順にして出力する
というのではいかが?
<おまけ>
この方法では、2進数でなくても、3進数でも4進数でも同じ方法で変換できますので、
先生によっては、ボーナス点がもらえるかもしれません。
No.5
- 回答日時:
本当に「処理系依存」をなくしたいなら, sizeof やキャストを使わない方がいいと思うんだ>#4. この例についていえば, そう
すれば完全に処理系非依存にできるよ.No.4
- 回答日時:
入力値が 16bit と定められているので
#include <stdio.h>
void print_short2binary(unsigned short si)
{
for(int i=1; i<=8*sizeof(si); i++)
printf("%d", (si & (~((~((unsigned short)0))>>1)))?1,0);
si<<=1;
if(!(i%4)) // 見やすくするために4桁毎にスペースを入れる
printf(" ");
}
printf("\n");
}
/*
※ 解説
要は、最上位ビットから順番に判定していきます。
処理系依存を極力無くすため、最上位ビットのマスク定数は
(~((~((unsigned short)0))>>1))
とします。符号なし全ビットを一旦 true にしておいて右シフトすると最上位ビットだけが false になるので、それを全ビット反転すると最上位ビットだけが残ります。
厳密には char のビット数が 8 でない処理系では使えませんが、現在は殆どそのようなシステムは使われていないと思われるので目を瞑ってください。
*/
No.3
- 回答日時:
一番単純な方法は、0~Fまでのビットパターンを全部用意しておいて、それを桁数ぶんだけ繰り返す方法です。
でもこのやり方はわかりやすいし高速かも知れませんけど、きっと先生の評価は低いでしょうね。概念だけ:
switch(hoge){
case 0xf:
"1111"
case 0xe
"1110"
後はまじめにビットパターン比較で、0b0000~0b1111までをループで回すこと。
No.2
- 回答日時:
自分ならビットシフト系のコマンドと排他的論理和(XOR)を駆使するかなあ。
…このように手順をまずは大雑把に考え、設問がどんなやり方なのかを「読み取る」事ができればあとは楽。
設問が実行しようとしている手順を再現すれば良いだけです。
・・・
ごめんね。
自分で考えて答えを出さないと根本的な「解決」にはならないと思うんだ。
ヒントをもらって色々と考えても分からないときは、具体的に何が分からないのかを添えて質問すると理解を深めることができます。
「分かったつもり」になって「疑問の先送り」をしないようにしましょう。
・・・余談・・・
このような回答(アドバイス)を送ると、約半数の人が自分をブロックするんだよねえ。
少なくともそれなりの知識があり興味を持って回答する人を排除することで
ブロックした当人が回答を得る機会を失うだけだから自分は気にしませんけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
16進数から2進数へ
C言語・C++・C#
-
printf で二進表示を行いたい。
C言語・C++・C#
-
再起呼び出しの回数をカウントするプログラム
C言語・C++・C#
-
-
4
str系関数を使わずに二つの文字を結合する方法
C言語・C++・C#
-
5
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
-
6
構造体のメンバをfor文で回したい
C言語・C++・C#
-
7
数値をASCII文字にする方法についての質問です。
C言語・C++・C#
-
8
プログラミングが分かりません。
C言語・C++・C#
-
9
C言語初心者 構造体 課題について
C言語・C++・C#
-
10
C言語初心者 構造体 課題について
C言語・C++・C#
-
11
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
12
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
13
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
14
C言語の入力した文字を反転させるプログラミングの仕方が分かりません。
Ruby
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列をスカラー変数として認...
-
pythonで演算子を変数に代入す...
-
pythonの*
-
int(input("○○"))の使い方
-
Pythonでコンソールをクリアす...
-
perlのprint文がうまく動きません
-
チェックボックスのCGIへの値の...
-
awkの正規表現での最左最短マッ...
-
perlで以下の記述の意味につい...
-
変数の中は文字列か数値か調べ...
-
PythonでUTF8の文字列をリスト...
-
Pythonでターミナルに文字を出...
-
foreach (1..4){ 英文字$_→$新...
-
プログラミングについて 文字列...
-
<python>戻り値の使い方
-
Pythonの疎行列を用いた要素同...
-
【至急!!!】python言語で本を見...
-
至急、[python初心者] listを使...
-
デレクトリーの画像フアィルの...
-
Perlにおける<?phpinfo();?>の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
パイソンのクラスについて
-
Pythonでターミナルに文字を出...
-
文字のカラーとフォントの指定...
-
シェルスクリプトで、空白(ス...
-
I2C接続のLCDディスプレイを使う
-
【至急!!!】python言語で本を見...
-
数値かどうかの判定方法
-
awkの正規表現での最左最短マッ...
-
Pythonでコンソールをクリアす...
-
int(input("○○"))の使い方
-
UWSCのSELECT文の記述方法
-
数値英単語変換
-
pythonで演算子を変数に代入す...
-
C言語
-
switch文のエラーについて
-
10進数→2進数の出力について
-
pythonを使ったプログラミング...
-
c言語 16進数の2進数への変換
-
Pythonでプログラミング プログ...
おすすめ情報