ビット演算子についての理解を深めたいです。そこで、ネットで検索して勉強しようと思ったのですが、読んでもよくわからないのと、実際、手を動かして動作確認しながら理解を深めようとターミナルでnodeを起動してビット演算をしてみたりしたのですが、書き方によって出てくる結果が変わったりしてどのように勉強したら良いのかわからずつまづいてます。
一応、2進数や8進数、10進数について理解していなかったので、今回、ビット演算子の勉強を行う上で、これらについては勉強し理解はしたような気はします。
とりあえず今はビット演算を勉強する上で、2段階で考えています。(この先の段階も勉強を進めていくにしたがって、自然と見えてくる気はしますが今はこの2段階で。)
- ビット演算子を理解する
- ビットシフト演算子を理解する
今回は1のビット演算子を理解するところに焦点を絞って質問をさせて頂ければ幸いです。
質問1
Macにnode.js環境はあるので、ビット演算子を手を動かしながら勉強する上で、ターミナルでnodeを立ち上げて、そこでコードを打ち込んで学習するか、chromeのコンソールで打ち込んで学習するかを検討しています。
> 0b1100 & 0b0111 4 > 1100 & 0111 72
ターミナルでnodeを立ち上げて、上記を実行するとまず出てくる結果が異なります。ブラウザーの履歴から見つけることが出来なかったので参考にしたサイトにリンクを貼れなくて恐縮ですが、その参考にしたサイトではC言語のGCCだか何かを使うから、0bをここでは先頭につけて実行しますみたいなことが書いてあったので、0bを先頭につけてみると、上のような結果になりました。
ただ、0bを外したらどうなるのだろうと思って、実行したのが上のコードの下のものなのですが、出てくる回答が異なりました。
ここで1つ目の質問なのですが、僕はビット演算の勉強をするにあたって、どういった環境(ターミナル?クロムのconsole?)を使ったほうが良くて、その場合、「0b」をつけるべきなのか、つけないべきなのか、そもそも、0bって何なのかが知りたいのです。
そして、2つ目の質問は「&」は、数字が両方同じなら1にしてそうじゃければ0にするみたいな解説があったので、例えば、「1100 & 0111」とあったら結果は「1000」になるのかなと思ったのですが、なぜか72が出力されています。これは何故なのでしょうか?「&」は両方同じなら1の値をかえすみたいな表現の理解を誤解しているのでしょうか?
いろいろと質問してしまって恐縮ですが、勉強もろくにスタート出来ない低次元のところでつまづいてしまって進まないので、お力をお貸しいただければ幸いです。
よろしくおねがいいたします。
理解の確認
- 0bから始まる - binary - 2進数
- 0o or 0から始まる - octa - 8進数
- oxから始まる - hex - 16進数
ビット演算子は演算対象が2進数でない場合は、まず2進数に値が変換されてから行われる。ビット演算子の結果は10進数の値で返る
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/23 06:10