Google Maps のコーディングをしていたのですが、仕様書の説明文が理解出来ない箇所があり、頭の中が沸騰。

いつもなら熟睡している時間なのに寝られない。


http://code.google.com/intl/ja/apis/maps/documentation/polylinealgorithm.html
同じ内容の英語のドキュメントを読んだけど意味は全く同じ。

リンク先にある

3.この10進値を2進値に変換します。負の値は正負を逆転して、バイト境界までの空いた桁に値を挿入する必要があります。
00000001 00010010 10100001 11110001 (1段目)
11111110 11101101 10100001 00001110 (2段目)
11111110 11101101 01011110 00001111 (3段目)


説明文と、処理の過程を示すビット配列の関係がわかりにくい。

1段目:10進数を2進数に変換し、4バイトで表現した
2段目:ビット演算のNOT?けど3バイト目が矛盾
3段目:もとの10進数がマイナスの値だから、2の補数にするために最終ビットに+1

なんだかすっきりしない記述です。
3段目の結果だけを見れば、10進数の値を2進数に変換しただけなのですが、じゃぁなぜこの3段分の記述があるのか?

ドキュメントをプリントアウトして、後輩に相談。
10分ぐらい論議したけど結論は出ず。

「使いこなしている人のソースコードを読もう」ということで、検索したらMark McClureさんのページに答えがありました。


ここのページにリンクしてあるJavaScriptを参考にしたところ。


3〜5の処理がわずか4行で記述されていました。
function conv(lat){
var num = lat<<1; //1ビット右へシフト
if ( lat < 0 ) { //マイナスの場合は
num = ~(num); //not値を取得
}
return num;
}


なんだ、簡単じゃん。