読者です 読者をやめる 読者になる 読者になる

続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

Javascriptで32bitのネットマスクを作るとき

Javascriptでわざわざビットシフト演算子を使いたいような人は殆どいないとおもいますが。。 Javascriptでも一応ビットシフトはできます。これを使って

/16 -> 1111111,11111111,00000000,00000000

のような変換を行いたいときに下記のコードを組みました

  var Dec;
  Dec = 16
  var bin;
  bin = Math.pow(2, Dec) - 1;
  bin <<= (32 - Dec);

  Logger.log(bin.toString(2));

Logger.log はGASで動かしたからだけなので、気にしないで。 さて、これで実行するとこうなります。

bin = -1

ううん?どゆこと?と思ったけど、32bit の最初のビットは符号(+ or -) に使うということを思い出した! 取っててよかったソフ開! というわけで、どうにかしてunsignedにするんですが、>>> という演算子でやるようです。

  var Dec;
  Dec = 16
  var bin;
  bin = Math.pow(2, Dec) - 1;
  bin <<= (32 - Dec);
  
  bin = bin >>> 0; //to unsigned

  Logger.log(bin.toString(2));

これで晴れてビット列が作れました!が、結局このコードは使いませんでした(^_^;)