質問: **下記リンク先で、桁を合わせるため、(r << 8)を(256 + r << 8)へ変更しているのですが、** ・256を足すと、どうして2進数『1000000000000000000000000』を足したことになるのでしょうか? > > 2進数で表すところの『1000000000000000000000000』、10進数で『16777216』、16進数で『1000000』を足すことによって一時的に桁を合わせ > > > ``` function toColorCode_1a(r,g,b){ return (((256 + r << 8) + g << 8) + b).toString(16).replace(/^1/,'#'); } ``` リンク ・1バイトが256だから? ・11111111?
回答: ビット演算とか2進数とか16進数とかあまり関係ありません。ただ単に桁数を合わせたいだけです。 10進数で考えてもいいです。 9999以下の数値がいろいろあったとします。 1 12 888 2345 これを4ケタ未満だった場合に4ケタになるように0を付けたい。そういう話です。つまり 0001 0012 0888 2345 にしたいと。 そのために1万を足して 10001 10012 10888 12345 にして、先頭の1をとれば目的に文字列になるよねという話です。 初心者の方には逆にわかりにくくなっているかもしれませんが、こちらの方がシンプルですよね。 あと念のため (((256 + r << 8) + g << 8) + b) は 256 << 16 r << 16 g << 8 b の4つの値を足したのと同じです。もしかするとこっちが分からなかった? ちなみに (256 << 16).toString(16) は1000000です。