学校で出た以下の問題の穴埋めが分かりません。先生曰く今回の課題はかなり難しいとの事だったのですが、、、案の定難しくてさっぱりでした。
みなさまどうか力をお貸しください。
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
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
7
strcat関数を自作したいです
C言語・C++・C#
-
8
構造体のメンバをfor文で回したい
C言語・C++・C#
-
9
while文について、c言語です。
C言語・C++・C#
-
10
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
11
数値をASCII文字にする方法についての質問です。
C言語・C++・C#
-
12
アスタリスクで正方形
C言語・C++・C#
-
13
プログラミングが分かりません。
C言語・C++・C#
-
14
C言語の入力した文字を反転させるプログラミングの仕方が分かりません。
Ruby
-
15
C言語初心者 構造体 課題について
C言語・C++・C#
-
16
C言語初心者 構造体 課題について
C言語・C++・C#
-
17
c言語でポインタ変数を用いた配列の反転操作
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
I2C接続のLCDディスプレイを使う
-
swift 文字コードから文字に変...
-
python print文のエラー
-
Pythonでターミナルに文字を出...
-
pythonの*
-
python で連想配列に代入、キー...
-
CGIでimgタグでalignを使うとエ...
-
Perlの例文でif($a==1&&$b==5&&...
-
MAXnum = input('最大数は?') f...
-
16進の10進変換について
-
数値かどうかの判定方法
-
pythonで演算子を変数に代入す...
-
【至急!!!】python言語で本を見...
-
perでメールが送信出来ない場合...
-
シェルスクリプトで、空白(ス...
-
Application.ScreenUpdating = ...
-
構造体の各データの表示につい...
-
セレクトボックスである項目を...
-
JSONで文字列が長い時
-
[python] 文字列を変数名として...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pythonでターミナルに文字を出...
-
16進の10進変換について
-
パイソンのクラスについて
-
【至急!!!】python言語で本を見...
-
シェルスクリプトで、空白(ス...
-
I2C接続のLCDディスプレイを使う
-
int(input("○○"))の使い方
-
数値かどうかの判定方法
-
pythonで演算子を変数に代入す...
-
awkの正規表現での最左最短マッ...
-
Pythonでコンソールをクリアす...
-
pythonを使ったプログラミング...
-
c言語 16進数の2進数への変換
-
関数「exists」と「defined」の...
-
ソケットでのデータ送受信につ...
-
pythonの*
-
Perlの例文でif($a==1&&$b==5&&...
-
数値をスラッシュで区切る方法
-
変数の中は文字列か数値か調べ...
-
PythonでUTF8の文字列をリスト...
おすすめ情報