タグ

algorithmとCに関するohnishiakiraのブックマーク (3)

  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

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

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
    ohnishiakira
    ohnishiakira 2009/11/08
    プリプロセッサでここまでできるのか・・・。「文字列化とトークン統合の罠」を見て、昔Linuxのコードを読んでて疑問に思ったことが解消できた。
  • C - でも一番右端の立っているビット位置を求めてみた : 404 Blog Not Found

    2009年07月07日03:30 カテゴリMathLightweight Languages C - でも一番右端の立っているビット位置を求めてみた 素晴らしい。 2009-07-04 - 当面C#と.NETな記録 問題の説明はここまでにして、コードの紹介です。Hacker's delight のコードより4〜5倍速く、そして、イミフ加減が半端じゃない!これ一つで 64bit 値以下のすべての値に対応できます。 でも、実際にどれくらい威力があるか試してみたかったのでCに移植してみた。意外な結果が出ております。 0x03F566ED27179461ULL まずは黒魔術。より黒魔術っぽくしてみました。 typedef unsigned long long U64; #define HASH 0x03F566ED27179461ULL static int ntzhash[64]; void i

    C - でも一番右端の立っているビット位置を求めてみた : 404 Blog Not Found
  • 初級C言語Q&A(15)

    初出: C MAGAZINE 1996年8月号 Updated: 1996-09-21 [←1つ前] [→1つ後] [↑質問一覧] [↑記事一覧] [ホームページ] 今回は、よく知られているけどちょっと分かりにくいアルゴリズム、あるいは、 今までの連載で出てきたトリッキーなコードについて、どのような原理で動作す るのかを紹介してみようと思います。ただし、一般論として、凝ったコードより も分かりやすいコードの方が価値がある場合が多いということも頭に入れておい てください。 凝ったアルゴリズム Q 【曜日の求め方】 Comp.lang.c FAQ listを見ると、曜日を求める関数として次のものが紹介され ていた。 dayofweek(y, m, d) /* 0 = Sunday */ int y, m, d; /* 1 <= m <= 12, y > 1752 or so */ { stat

  • 1