私は C プログラミングを学ぼうとしています。いくつかのソース コードを勉強していましたが、特にビット単位の演算子に関して、理解できないことがいくつかあります。これに関するいくつかのサイトを読んで、彼らが何をしているのかちょっとわかったのですが、戻ってこのコードを見てみると、なぜ、どこでどのように使用されているのか理解できませんでした.
私の最初の質問は、ビット単位の演算子ではなく、ASCII マジックに関するものです。
次のコードがどのように機能するかを誰かに説明してもらえますか?
char a = 3; int x = a - '0';
これはcharをintに変換するために行われることは理解していますが、その背後にあるロジックはわかりません。なぜ/どのように機能するのですか?
さて、Bitwise演算子に関して、私はここで本当に迷っています。
このコードは何をしますか?
if (~pointer->intX & (1 << i)) { c++; n = i; }
~ がビットを反転することをどこかで読みましたが、このステートメントが何をしているのか、なぜそれをしているのかわかりません。
この行と同じ:
row.data = ~(1 << i);
その他の質問:
if (x != a) { ret |= ROW; }
|= 演算子は正確には何をしているのでしょうか? 私が読んだことから、 |= は OR ですが、このステートメントが何をしているのかよくわかりません。
このビット単位の演算子を使用しないように、このコードをわかりやすく書き直す方法はありますか? 私はそれらを理解するのが非常に混乱していると思うので、うまくいけば、誰かがそれらがどのように機能するかを理解するための正しい方向に私を向けてくれます!
ビット演算子についての理解が深まり、コード全体がより理解できるようになりました。
最後に 1 つ: このコードを理解しやすく、おそらく「ビットレベル」ではない方法で書き直すための「よりクリーンな」方法があるかどうかについて、誰も答えなかったようです。何か案は?