タグ

c++とtipsに関するnitoyonのブックマーク (5)

  • 一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録

    一番右端の立っているビット位置(RightMostBit)を求めるコードで速いのないかなーと探していたら、ものっっっすごいコードに出会ってしまったのでご紹介。2ch のビット演算スレで 32bit 値のコードに出会って衝撃を受けて、その後 64bit 値版のヒントを見つけたのでコードを書いてみました。 この問題は ハッカーのたのしみ―物のプログラマはいかにして問題を解くか (Google book search で原著 Hacker's delight が読めたのでそれで済ませた) で number of trailing zeros (ntz) として紹介されています。bit で考えたときに右側に 0 がいくつあるかを数えるもの。1 だと 0、2 だと 1、0x80 なら 7、12 なら 2 といったぐあい。0 のときに表題どおりの問題として考えるといくつを返すの?ってことになるので、

    一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録
    nitoyon
    nitoyon 2009/07/05
    むずかしい
  • 三項演算子の正しい書き方

    C・C++JavaPerl などのプログラミング言語では、条件演算子として三項演算子?:が用意されている。条件演算子の書き方として、以下のような説明がされることが多い。 condition ? true-expression : false-expression この説明は、以下のプログラムと同じ程度、間違っている。 #include <stdio.h> main( ){printf ("hel" "lo, world\n" );} 条件演算子は、正しくは以下のように書く。 condition ? true-expression : false-expression 使い方の例を示す。 compare = obj1 == null ? obj2 == null ? 0 : -1 : obj2 == null ? 1 : obj1.toString().compareTo(obj2.to

    nitoyon
    nitoyon 2007/07/27
    if-else 風に書く方法と、swich-case 風に書く方法。
  • CodeProject: Linker Errors, CString, ATL, MFC, and YOU!. Free source code and programming help

    nitoyon
    nitoyon 2007/04/07
    CString を ATL、MFC で相互に使うための方法。
  • いやなブログ: C のテンプレートでダックタイピング

    C++ のテンプレートでダックタイピング RubyPython などの動的な言語では、ダックタイピング (duck typing) というテクニックが多用されています。 ダックタイピングは、同じインタフェースさえ備えていれば型は何でも構わない、という考え方に基づく多態 (polymorphism) の手法です。アヒルのように見えて、アヒルのように鳴くなら、アヒルに違いない、というわけです。 そして、現在最も注目を浴びている言語である C++ でもテンプレートを用いるとダックタイピングを行えます。 ダックタイピングを使うと、継承関係を無視して多態的にオブジェクトのメソッドを呼び出せます。たとえば、次の Ruby のコードでは、func に Duck と Foo のどちらのオブジェクトを渡しても正常に動作します。これは Duck, Foo ともに、共通のインタフェースを持つ quack

    nitoyon
    nitoyon 2007/03/09
    C++ でダックタイピング。共通のインターフェースを継承しなくても、それっぽいことができる。テンプレートなのでコンパイル時判断。
  • C++でプロパティ - NuWiki

    C#の場合 class Object { public int Value { get{ return mValue;} set{ mValue = value;} } private int mValue; } obj.Value = aValue; get/setメソッドの中にデバッグ出力などの処理を入れることができる。それならC++でもできる話だが,これが obj.Value = aValue; のように変数への代入のように書けるのがポイント。 これを C++でも実現できないか?というのが主題。最終的に次のようなコードを書けるようにする。 int main(int argc, char* argv[]) { A a; a.Visible = false; if (a.Visible) printf("a is visible?n"); else printf("a is n

    nitoyon
    nitoyon 2007/02/15
    プロパティクラスを定義して、プロパティもどきを実装。Property クラスのインスタンスに getter, setter のポインタを渡し、代入演算子でsetter・キャスト演算子でgetterを呼び出す。defineを駆使してもっときれいにしたくなる。
  • 1