タグ

ブックマーク / qnighy.hatenablog.com (2)

  • ビット演算関連 - 簡潔なQ

    フラグとして使ったりするときに必須なやつ。 &で論理積 |で論理和 ^で排他的論理和 ~でビット反転 a|=bでフラグを立てる。 a&=~bでフラグを折る。 a^=bでフラグを反転。 シフト <<で左シフト。0で埋められる。 >>で右シフト。算術シフトか論理シフトかは決まってないらしい。 算術シフト:最上位ビットはシフト前のが継承されるので、負数も2でわった感じになる。 論理シフト:最上位ビットは0になる。 ちなみに手元のLinux(GCC4.3.4,x86)で試したら、signedは算術、unsignedは論理だった。まあさすがにunsignedが論理シフトは仮定していいと思うんだけどどうなんだろう。 ちなみに有名な話だが、シフトの性質上、算術右シフトは端数を負の無限大方向に切り捨てる。除算だと0方向に切り捨てる場合が結構あって、実際C99ではそういう仕様っぽいので、そこを区別する

    ビット演算関連 - 簡潔なQ
    n4_t
    n4_t 2010/02/16
  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
    n4_t
    n4_t 2009/11/08
    これは良いドキュメント
  • 1