
学校で出た以下の問題の穴埋めが分かりません。先生曰く今回の課題はかなり難しいとの事だったのですが、、、案の定難しくてさっぱりでした。
みなさまどうか力をお貸しください。
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も見ています
-
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
printf で二進表示を行いたい。
C言語・C++・C#
-
16進数から2進数へ
C言語・C++・C#
-
-
4
再起呼び出しの回数をカウントするプログラム
C言語・C++・C#
-
5
str系関数を使わずに二つの文字を結合する方法
C言語・C++・C#
-
6
ハンドルされていない例外が発生しました
C言語・C++・C#
-
7
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
-
8
空白を含んだ文字列がうまく格納(表示)できない
C言語・C++・C#
-
9
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
10
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
11
テキストファイルから文字列を読み込んで二次元配列に格納するには
C言語・C++・C#
-
12
strcat関数を自作したいです
C言語・C++・C#
-
13
C言語 配列の長さの上限
C言語・C++・C#
-
14
16進数 加算 減算 C言語
C言語・C++・C#
-
15
c言語でAからZまでを表示するプログラム
C言語・C++・C#
-
16
C言語のfor文です。 繰り返しの中で文字を一つずつ増やしていくやり方を教えてください for(i=
C言語・C++・C#
-
17
プログラミングが分かりません。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトで、空白(ス...
-
【至急!!!】python言語で本を見...
-
c言語 16進数の2進数への変換
-
favicon.ico
-
選択したユーザーに対してメー...
-
Pythonでコンソールをクリアす...
-
qq!!の意味を教えてください。
-
16進の10進変換について
-
N88-日本語 BASIC ASCII ファイル
-
linuxにおけるCの自作ヘッダフ...
-
配列 各項目を$n倍するプログ...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
<SELECT>タグの折り返し
-
セレクトメニューで2つの項目...
-
実行時エラー 3020の対策
-
FindFirst を複数条件で検索
-
文字の横にプルダウンを表示さ...
-
formで特定のinputを送信しない...
-
sendmailで複数の宛先にメール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトで、空白(ス...
-
16進の10進変換について
-
I2C接続のLCDディスプレイを使う
-
Pythonでコンソールをクリアす...
-
pythonの*
-
c言語 16進数の2進数への変換
-
条件文の扱い方について
-
関数「exists」と「defined」の...
-
【至急!!!】python言語で本を見...
-
ファイルに書き込む
-
EUCで保存されたスクリプトにて...
-
Perl・正規表現が分かりません
-
改行
-
perlの型と8進数、10進数
-
ソートを利用して文字を昇順で...
-
配列 各項目を$n倍するプログ...
-
表という文字の扱いについて
-
シェルスクリプト+perl
-
ポーリングとHTMLデータのリロ...
-
awkの正規表現での最左最短マッ...
おすすめ情報