タグ

2012年3月16日のブックマーク (2件)

  • 初級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

  • ビット数を数えるルーチン - Weblog on mebius.tokaichiba.jp

    かつてJR横浜線 十日市場駅近くのMebius (CPU:Pentium 150MHz)より発信していたウェブログです。 32bitの立っているビット数を高速に数えるアルゴリズムとして、 int bitcount(unsigned long n) { n = ((n&0xaaaaaaaa) >> 1) + (n&0x55555555); n = ((n&0xcccccccc) >> 2) + (n&0x33333333); n = ((n&0xf0f0f0f0) >> 4) + (n&0x0f0f0f0f); n = ((n&0xff00ff00) >> 8) + (n&0x00ff00ff); n = ((n&0xffff0000) >> 16) + (n&0x0000ffff); return n; } こういうのが良く知られている。1行目で2ビットずつ足し合わせることで2ビットの中の

    ビット数を数えるルーチン - Weblog on mebius.tokaichiba.jp