C言語の入門でビットのところでつまづいています。
全く意味がわかりません。何がわからないかもわかりません・・・
そこで質問ですが、ざっくり言うとビットとはなんですか?(専門的ではなく本当にざっくりとお願いします)
また、ビットはどのようなときに使う(?)のですか?
みなさんありがとうございます!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
ベストアンサー
コンピュータが情報を保持する最小の単位です
0または1のどちらかの値を取ります。
intだのcharだのいろいろ型を宣言すると思いますが、
そのデータはビットの羅列で扱われます。
いつ使うか
例えば組み込みなどメモリが限られている環境下で、
8個のフラグのためにcharを8個宣言すると8byte使ってもったいないので
char一個だけ宣言してビット一つ一つをフラグに使います。
例えばマイコンだと、外部端子18番の電圧がHレベルかLレベルかを8ビット目みたいな感じで管理します。
アドレス~~~番地の1
8個のフラグを8個のcharで管理した場合
0000000? X 8個 ^ ここしか使わない:もったいない
8個のフラグを1個のcharで管理した場合
???????? X 1個 全部使える
他には何か変態的なアルゴリズムでたまに使っている気がします。
簡易乱数生成のXorShiftなど。
普通にプログラム組む分にはほとんど使いません。
投稿2016/02/05 10:06
総合スコア13521
0
とりあえず、二進数の概念は理解できていますか?
今は小中学校の段階でn進数の概念を教えていると聞いていますから、技術や理系の専門課程を履修していなくても学校で習ったことかあると思うのですが、それが理解できましたか?
ビットに関する一番簡潔な説明は、「2進数の1桁」です。
用語辞典などにもそのように説明されていることが多いと思います。
二進数について理解できていれば、この説明でビットがどういうものであるか、
「最上位ビット」といった言葉が何を意味するかは簡単にわかります。
逆に二進数を理解できていないと、ちんぷんかんぷんでしょうし、「C言語における ビットの操作の説明」をいくら読んでも
全く意味がわかりません。
となるのは当然だと思います。
コンピューターに関する、特にプログラマー向けの話は、二進数を理解できていることが前提の話が多いので、まず二進数に関して、どこか(今は検索すればたぶんいいページが見つかると思うのですが…、あるいは捨てていないなら教科書を読みなおすのもいいかもしれません)できちんと勉強してからのほうが理解が早いと思います。
コンピューターの専門課程で勉強している人は、十進数と二進数と十六進数(あとまれに八進数)の変換をうんざりするぐらいやっています。(今はそうでもないのかな…?)
二進数は現在のデジタルコンピューター技術の根幹です。
二進数(とブール代数と論理回路)が理解できていると、「なぜオンオフだけの電子回路でさまざまな計算ができるのか」といった疑問の答えにも近づけます。
完全にできるようになる必要はありませんが(わたしもできません)二進数の四則演算程度は経験として本を見ながらでもやってみると、その後のコンピュータ関連の技術に関する(特にC言語等のハードウェアに近いものの)理解のしやすさが違います。
投稿2016/02/05 10:36
編集2016/02/06 02:16総合スコア1193
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
総合スコア324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/02/06 13:19
0
また、ビットはどのようなときに使う(?)のですか?
外部機器を制御する時はbitを使います。
レジスタという8とか16bitに機器の状態を示す情報がまとめられていて、
その機器がReadyとか、Errorとか、データを受け取ったとかを表します。
また、そのうちの1bitを0→1にすることで、機器が動いたり止まったりします。
もちろん、すべての機器がこうだというわけではなく、bit操作以外で、制御する機器もあります。
投稿2016/02/06 02:51
総合スコア711
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/02/06 13:09
0
ビットはどのようなときに使う(?)のですか?
フラグという言葉は聞いたことがあるかと思います。真/偽、ON/OFF、あり/なし、有効/無効、などのような二つの状態を表現する値のことですが、これを0か1かに置き換えて変数に保存する際、いくつものフラグを別々の変数に保存するのはもったいない、あるいは、管理が煩雑になるということで、ビットに割り当てて一つの変数で複数のフラグ(状態)をまとめて管理するということはごく一般的に行われています。ビットフィールドと呼ばれる手法です。
C/C++では言語レベルでビットフィールドがサポートされていますが、パフォーマンスや移植性などに難があるのでほとんど使われません。
投稿2016/02/05 23:19
総合スコア5938
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/02/06 13:11
0
ビットはスイッチみたいなものです。そのスイッチは ON、OFF のどちらかになっています。
8ビットなら、スイッチが8個ずらっと並んでるわけですね。
投稿2016/02/05 10:34
総合スコア306
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/02/06 13:13
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/02/06 13:14