学校で出た以下の問題の穴埋めが分かりません。先生曰く今回の課題はかなり難しいとの事だったのですが、、、案の定難しくてさっぱりでした。
みなさまどうか力をお貸しください。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
16進数から2進数へ
C言語・C++・C#
-
printf で二進表示を行いたい。
C言語・C++・C#
-
再起呼び出しの回数をカウントするプログラム
C言語・C++・C#
-
-
4
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
5
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
-
6
プログラミングが分かりません。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数「exists」と「defined」の...
-
16進の10進変換について
-
【至急!!!】python言語で本を見...
-
LWPを使用して、自アカウントの...
-
Pythonでコンソールをクリアす...
-
UWSCのSELECT文の記述方法
-
awkの正規表現での最左最短マッ...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
-
HASH(0xほげほげ)
-
VBAでPDFのコピーとリネームを...
-
この曲のピアノの最後の和音が...
-
<SELECT>タグの折り返し
-
SELECT要素の垂直位置
-
VB6で、長い時間かかる処理...
-
ACCESS テキストボックスを隙...
-
日齢計算プログラム
-
日付の差分の求め方(日、分)
-
メールフォームを作成したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
pythonで演算子を変数に代入す...
-
【至急!!!】python言語で本を見...
-
c言語 16進数の2進数への変換
-
シェルスクリプトで、空白(ス...
-
int(input("○○"))の使い方
-
switch文のエラーについて
-
UWSCのSELECT文の記述方法
-
pythonの*
-
関数「exists」と「defined」の...
-
awkの正規表現での最左最短マッ...
-
pythonの この問題が分かりませ...
-
linuxにおけるCの自作ヘッダフ...
-
Pythonの np.indicesに関する質...
-
pythonを使ったプログラミング...
-
チェックボックスのCGIへの値の...
-
I2C接続のLCDディスプレイを使う
-
変数の中は文字列か数値か調べ...
-
Pythonでコンソールをクリアす...
-
perでメールが送信出来ない場合...
おすすめ情報