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

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

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

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

Q&A

解決済

1回答

879閲覧

C 言語の型変換について

ruby_11

総合スコア37

C

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

0グッド

0クリップ

投稿2018/02/15 11:09

独習 C を使って C 言語を学んでいる C 言語初心者です.

以下のようなコードがあります.

C

1#include <stdio.h> 2 3int main(void) 4{ 5 char ch; 6 int i; 7 8 i = 1000; 9 ch = i; 10 11 printf("%d\n", i); 12 13 return 0; 14}

上のコードを実行すると,-24 が出力されるのですが,なぜ -24 が出力されるのか分かりません.

char 型は,int 型よりもビット数が小さく,char 型が 8 ビットであるのに対して,int 型は,32 ビットなので,(8 - 32) で -24 になるのでしょうか?

しかし,i の値を 500 にすると,出力は -12 になり,さらに 250 にすると,-6 になります.

char 型の範囲が,[-127 ~ 127] なので,127 を超えた値は全て127 になるのではないかと思いました.

ご指摘いただければ幸いです.

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

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

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

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

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

y-doi

2018/02/15 16:02

コードが一部間違ってますね。chじゃなくてiを表示しようとしてます
guest

回答1

0

ベストアンサー

1000は、2進数32bitで、0000 0000 0000 0000 0000 0011 1110 1000です。
char型つまり「符号付き8bit」に代入すると、1110 1000です。
これを10進数に直すと-24です。

投稿2018/02/15 11:23

otn

総合スコア84421

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

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

ruby_11

2018/02/15 11:49

ご指摘ありがとうございます. 2 進数から 10 進数の変換,2 進数のマイナス表記に関する知識が欠けていました. 勉強になりました.ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問