質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

99閲覧

2の補数表現に書き換えたい

h_proc

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/11/29 14:40

編集2018/11/29 22:23

32ビット符号付き整数を2進数表示に変更する関数を作っています。(引数はx)負の値が入力されたら、2の補数で表示させたいです。そこで、1を0に、0を1にしたいのですが、うまく動きません。どこが間違っているか教えてください。

作った関数sort_2のコードはこれです。

c

1void binary_m(int x) { 2 int i = 0; 3 int dt[32] = { 0 }; 4 5 if (x > 0) { 6 for (i = 0; x > 0; i++) { 7 8 dt[i] = x % 2; 9 x = x / 2; 10 } 11 while (i > 0) { 12 printf("%d", dt[--i]); 13 } 14 } 15 else { 16 x = -x; 17 for (i = 0; x > 0; i++) { 18 19 dt[i] = x % 2; 20 x = x / 2; 21 } 22 if (dt[i] = 0) { 23 dt[i] += 1; 24 } 25 else { 26 dt[i] = 0; 27 } 28 while (i > 0) { 29 printf("%d", dt[--i]); 30 } 31 } 32 33}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

こんな漢字で、

C

1void binary_m(unsigned int x) { 2 for (unsigned int m = 1 << (sizeof(x) * 8 - 1); m; m >>= 1) { 3 putchar(x & m ? '1' : '0'); 4 } 5 printf("\n"); 6}

投稿2018/11/29 22:35

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

c

1void binary_m(unsigned int x) 2{ 3 int bits = sizeof(x) * 8; /* bit数 */ 4 unsigned int mask; 5 int i; 6 mask = 1 << (bits-1); 7 for ( i = 0; i < bits; i++ ) { 8 if ( (x & (mask >> i)) != 0 ) { 9 printf("1"); 10 } else { 11 printf("0"); 12 } 13 } 14 printf("\n"); 15}

こんな解もありますよ。
コンピュータで負の数がどのような値として扱われてるかの理解になれば幸いです。

投稿2018/11/29 16:44

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2018/11/29 22:16

回答ありがとうございます。32ビットと指定されているのですが、その場合はどうすればよいのでしょうか。
guest

0

C

1void binary_m(unsigned int x) { 2 int i; 3 int dt[32]; 4 5 for (i = 0; x > 0; i++) { 6 dt[i] = x % 2; 7 x = x / 2; 8 } 9 while (i > 0) { 10 printf("%d", dt[--i]); 11 } 12 printf("\n"); 13}

でどうでしょうか。

投稿2018/11/29 15:26

otn

総合スコア84551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2018/11/29 22:08

回答ありがとうございます。引数を入力する段階で、unsigned intにすればいいんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問