last update: 2013/09/03

2004/12/28

こたえあわせ

既にもう帰省途中の札幌の友人宅なんですが、すっかりクロスのLANケーブルを忘れちゃってロクにネットもできなかったりです。

まぁとりあえず偶数だったら2で割る話の答え。

if(n%2==0){
    n=n/2;
}

これを条件分岐なしで書けって話でしたが、私の用意した答えは

n>>=(n^1)&1;

でした。ちなみにたいぷちゃんが出した答えは

n>>=~n&1;

うん、これでも確かにいいですね、むしろすっきり(とりあえず演算子の優先順位とか丸覚えしてないのでオレは普通に~n&1だと~(n&1)になるんじゃねーのー? とか思ってたイケてないプログラマ)

まあ一応解答の手引きをしておきますと、2で割るっていうのは1ビット右シフトなので、これはまぁいいですね。

で、奇数なら0、偶数なら1を返すようなビット演算を作って、n>>=(ビット演算)という形にすれば条件分岐を使わずともOK、ということになります。まぁ、0か1を返すようなビット演算をするようにするには1との論理積を取ればいいので(なんか)&1になるのは明白です。

で、nとそのまま論理積をとると偶数で0、奇数で1を返すビット演算になってしまうので、これを反転させればいいです。ってことで、排他的論理和をとるなり、ビット反転するなりすれば、上の答えに辿り着きますね。

…とまぁこんな書き方をすると確かにビット演算のみなので相当高速化されてますが、コメントなしでこんなことかいてたら同僚にぶん殴られそうですね。はい。

久々札幌

ってことで、微妙に友人が起きるまでの間PCを占拠して更新中です。

とりあえず、昨日はダーツ行って飯を食おうとものすごくいろんなところをさまよって、んでもって結局当てにしてたところは全部閉まっていたというとってもすばらしいことになってわりとしょんぼりでした。

午後7時過ぎから出かけたんですが…、とりあえずススキノの暖中→8時じゃないと席が空かない→しかたないのでなか卯でちょっとおなかの隙間を埋める→8時半から2時間ちょいダーツ→そのあとススキノ狸小路方面をうろうろ→じゃあそろそろ暖中→わざわざこの時間(午後11時半)からススキノ暖中行かなくても車で八軒の暖中に行った方がいい(そっちのほうが営業時間が長い)というBOSS(誰)のお言葉により車で八軒の暖中へ。

…夜中12時過ぎ、いったら真っ暗、閉まってた(午前2時まで営業って書いてあったんですが…)。で、仕方ないのでm2u実家を眺めたりした後またススキノ方面へもどり、五丈原へ。……これも閉まってた。11時半の時点で大人しくススキノ暖中に行ってればよかったのになぁとかいう話をしつつ、結局なんか普通にペペサーレとかでピザとパスタをたくさん食べて夜ご飯終了。

いや、しかしまぁ、ダーツのあとの狸小路うろうろ時に最近なにかと燃えてるドンキホーテに行ったんですが、あー、ありゃ確かに燃えてもおかしくないなーというか、普通に警備員うろうろしてたけど、あの程度なら全然火つけるスキあるんじゃないのかなーとも思ったり。札幌はまだ燃えてなくて何よりです

ってことで、今日はこの後携帯変えたりマウス買ったりしてそのまま実家へ帰還の予定になってます。

ってことで、皆さんよいお年をお過ごしください。新年は1/5あたりから復活の予定になっています。

comments powered by Disqus