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

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

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

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

Q&A

解決済

7回答

2677閲覧

C言語のビットが理解できない!

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

1クリップ

投稿2016/02/05 09:21

編集2016/02/06 13:08

C言語の入門でビットのところでつまづいています。
全く意味がわかりません。何がわからないかもわかりません・・・
そこで質問ですが、ざっくり言うとビットとはなんですか?(専門的ではなく本当にざっくりとお願いします)
また、ビットはどのようなときに使う(?)のですか?

みなさんありがとうございます!

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

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

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

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

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

guest

回答7

0

ベストアンサー

コンピュータが情報を保持する最小の単位です
0または1のどちらかの値を取ります。
intだのcharだのいろいろ型を宣言すると思いますが、
そのデータはビットの羅列で扱われます。

いつ使うか
例えば組み込みなどメモリが限られている環境下で、
8個のフラグのためにcharを8個宣言すると8byte使ってもったいないので
char一個だけ宣言してビット一つ一つをフラグに使います。
例えばマイコンだと、外部端子18番の電圧がHレベルかLレベルかを
アドレス~~~番地の1
8ビット目みたいな感じで管理します。

8個のフラグを8個のcharで管理した場合

0000000? X 8個 ^ ここしか使わない:もったいない

8個のフラグを1個のcharで管理した場合

???????? X 1個 全部使える

他には何か変態的なアルゴリズムでたまに使っている気がします。
簡易乱数生成のXorShiftなど。

普通にプログラム組む分にはほとんど使いません。

投稿2016/02/05 10:06

ozwk

総合スコア13521

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:14

回答ありがとうございます! 一番わかりやすかったです! 助かりました!
guest

0

とりあえず、二進数の概念は理解できていますか?
今は小中学校の段階でn進数の概念を教えていると聞いていますから、技術や理系の専門課程を履修していなくても学校で習ったことかあると思うのですが、それが理解できましたか?

ビットに関する一番簡潔な説明は、「2進数の1桁」です。
用語辞典などにもそのように説明されていることが多いと思います。
二進数について理解できていれば、この説明でビットがどういうものであるか、
「最上位ビット」といった言葉が何を意味するかは簡単にわかります。
逆に二進数を理解できていないと、ちんぷんかんぷんでしょうし、「C言語における ビットの操作の説明」をいくら読んでも

全く意味がわかりません。

となるのは当然だと思います。

コンピューターに関する、特にプログラマー向けの話は、二進数を理解できていることが前提の話が多いので、まず二進数に関して、どこか(今は検索すればたぶんいいページが見つかると思うのですが…、あるいは捨てていないなら教科書を読みなおすのもいいかもしれません)できちんと勉強してからのほうが理解が早いと思います。
コンピューターの専門課程で勉強している人は、十進数と二進数と十六進数(あとまれに八進数)の変換をうんざりするぐらいやっています。(今はそうでもないのかな…?)

二進数は現在のデジタルコンピューター技術の根幹です。
二進数(とブール代数と論理回路)が理解できていると、「なぜオンオフだけの電子回路でさまざまな計算ができるのか」といった疑問の答えにも近づけます。
完全にできるようになる必要はありませんが(わたしもできません)二進数の四則演算程度は経験として本を見ながらでもやってみると、その後のコンピュータ関連の技術に関する(特にC言語等のハードウェアに近いものの)理解のしやすさが違います。

投稿2016/02/05 10:36

編集2016/02/06 02:16
kozuchi

総合スコア1193

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:12

回答ありがとうございます! 二進数はある程度理解しているつもりでしたが、まだまだ甘いということがわかりました!もっと、二進数について調べます! 助かりました!
guest

0

まず2進数の理解が必要ですね。

私たちが普段使用している数字は10進数と呼ばれていて、
0~9までを1桁で表現し、これに1を足すと桁が上がる数の数え方です。
これに対して2進数とは、0~1までを一桁で表現し、これに1を加えると桁が上がる数の数え方です。

今、私たちが利用しているコンピュータは、ほとんどがこの2進数で数値を扱うように作られていて、
この0と1しか表現できない最小の桁をbitと呼んでいます。
もちろん、2進数と10進数を変換することは可能です。

手っ取り早く2進数を理解するために、実際に10進数を2進数に変換してみましょう。
頭ではなく体で覚えますw
まず右手を出してグーにしてください。(0)
この各指がビットです。
これで2進数を5桁で表現できます。
まず親指に1を足します。(1)
親指を立ててください。
親指に更に1を足します。(2)
親指はもう立っているので、親指を閉じて隣の人差し指を立てます。
親指に更に1を足します。(3)
親指が折り曲げられているので、親指を立てます。
親指に更に1を足します。(4)
今度は親指が立っているので、折り曲げます。
隣の人差し指も立っているので、折り曲げます。
そして今度は中指を立てます。

これを延々繰り返すと、右手だけで31までの数字を数えることができます。
つまり、10進数の31は、2進数では11111になります。
両手を使えば、1023までの数字を表現できますよ^^

それから、
bitはどんな時に必要になるか?ですが、
値をshiftしたり、bitを論理演算したりする時に必要になります。
とは言え、そう言う演算が必要になる事は稀ですが。
パッと思いつくのはビットフラグでしょうか?
あまり良い使い方だとは思いませんが。

投稿2016/02/06 13:12

chun

総合スコア324

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:19

回答ありがとうございます! 二進数で表せる最小の桁がビットなんですね! 両手で1023まで表せれるようになるとかっこいいですね! 助かりました!!!
guest

0

また、ビットはどのようなときに使う(?)のですか?

外部機器を制御する時はbitを使います。
レジスタという8とか16bitに機器の状態を示す情報がまとめられていて、
その機器がReadyとか、Errorとか、データを受け取ったとかを表します。
また、そのうちの1bitを0→1にすることで、機器が動いたり止まったりします。
もちろん、すべての機器がこうだというわけではなく、bit操作以外で、制御する機器もあります。

投稿2016/02/06 02:51

nob.

総合スコア711

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:09

回答ありがとうございます! 組み込み系などに使うのですね! 助かりました!
guest

0

ビットはどのようなときに使う(?)のですか?

フラグという言葉は聞いたことがあるかと思います。真/偽、ON/OFF、あり/なし、有効/無効、などのような二つの状態を表現する値のことですが、これを0か1かに置き換えて変数に保存する際、いくつものフラグを別々の変数に保存するのはもったいない、あるいは、管理が煩雑になるということで、ビットに割り当てて一つの変数で複数のフラグ(状態)をまとめて管理するということはごく一般的に行われています。ビットフィールドと呼ばれる手法です。

C/C++では言語レベルでビットフィールドがサポートされていますが、パフォーマンスや移植性などに難があるのでほとんど使われません。

投稿2016/02/05 23:19

catsforepaw

総合スコア5938

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:11

回答ありがとうございます! ビットフィールドという新しい単語を知れて勉強になりました! 助かりました!
guest

0

ビットはスイッチみたいなものです。そのスイッチは ON、OFF のどちらかになっています。
8ビットなら、スイッチが8個ずらっと並んでるわけですね。

投稿2016/02/05 10:34

WoodenHamlet

総合スコア306

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:13

回答ありがとうございます! xビットというのはスイッチのようなものがx個並んでいるといことなんですね! 助かりました!
guest

0

コンピューターのデータは全て数値で表すことができます。
文字や画像や音声、動画でさえも、中身は数値で表現できます。

そして、全ての数値は、たった二種類の値を組み合わせて作ることができます。

ゼロと、イチです。

その、ゼロまたはイチ一個分が、1ビットです。

投稿2016/02/05 09:53

thom.jp

総合スコア686

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

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

退会済みユーザー

退会済みユーザー

2016/02/06 13:16

回答ありがとうございます! 0と1だけで全てを表せてしまうんですね・・・恐ろしいです>_< 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問