32ビット環境で64ビット整数を扱う (減法編)
32ビット環境で64ビット整数を扱う (加法編) の続き。
今回は、加法のコードに少し手を加えて、減法を行う関数を作成します。

2009年04月21日32ビット環境で64ビット整数を扱う (減法編)
32ビット環境で64ビット整数を扱う (加法編) の続き。 2009年03月11日カウンタ付き参照C++ では、new を用いてオブジェクト (メモリ領域) を確保したならば、これを delete でを明示的に解放してやらなければなりません。 この「借りたもの (メモリ) は自分で返す」という硬派なスタイルは非常に C++ らしく、またパフォーマンスの面でも優れるため、個人的にはとても気に入っています。 その一方で、このスタイルにはメモリリークや二重解放によるアクセス違反, ダングリング・ポインタの発生とった問題があり、致命的なバグの原因となりがちであることも事実です。 また、プログラムの性質上、オブジェクトが利用されなくなるタイミングが予測しづらく、明示的な解放を記述することが原理的に困難であるような状況というものも存在します。 C/C++ 以外の殆どの言語はガーベジ・コレクションを言語仕様として採用することでこうした問題を回避しています。 特に、ガーベジ・コレクション手法の一つである参照カウントは、その動作原理が非常に単純であり、またそれ故に (一般的な状況下における) パフォーマンスにおいて他の手法よりも優れています。 そこで、この参照カウントの仕組みを C++ でも利用できないかと考え、Reference というクラステンプレートを作ってみました: ソースコードは上記リンク先のページからダウンロードすることができます。 今回はこの Reference クラステンプレートの使い方について簡単に説明します。 2009年02月17日C++ スタイルのキャストC言語では、キャスト (型変換) を以下のような形式で行います。
この記法では、どのような種類のキャストが行われるのかを明示したり、不正・危険なキャストに対してチェックを行うことができないという問題があります。 2009年02月08日2008年12月19日2008年11月09日エスケープは出力時に
CGIプログラムは、HTMLを出力とすることが多い (というか殆ど) ため、入力データに対して HTML エスケープを施すものが多く見られます。
HTMLのタグや属性の記述に使用される 2008年09月27日FBXファイルを読み込む(スキン情報の取得)
松浦さんから依頼を受けて、Autodesk Maya 等の .fbx 形式からMicrosoft DirectX の .x 形式に変換するスクリプトを書きました。
FBX形式の仕様は膨大で、予想していたよりもずっと大掛かりな作業となってしまいました。 これからFBX SDKを扱う人の助けになることを祈って、解説記事を書くことにします。 2008年09月26日モーションキャプチャデータの使い方(計画編)
前回予定していましたFBX形式からメッシュやマテリアル情報を抜き出す方法ですが、FBXSDKのドキュメントがあまりにも、以下略であるため、断念しました。 2008年09月04日32ビット環境で64ビット整数を扱う (加法編)
通常用いられる整数型 (32ビット符号付き) は -2,147,483,648 ~ 2,147,483,647 の範囲の値を表現することができます。
殆どのアプリケーションにおいては、この制限が問題になることはまずありません。 しかし、この範囲を超える値を扱う必要のあるアプリケーションも存在します。 そこで考え付くのが、32ビット環境で64ビット整数を扱うための仕組みを作ることですが、実際にやってみると意外なほどに手間が掛ってしまいます。 この記事では、四則演算・10進出力などのプログラムを組むときの手順や考え方について解説していきます。 64ビット整数の表現
まず、64ビット整数を表現するための構造体を定義します。
DWORD (unsigned long) 組み込みの整数型は最大で32ビットまでなので、これを 2つ組み合わせて64ビット整数を表現します。
2008年09月01日連結リストを作る (1)
C/C++ の配列は、そのサイズをコンパイル時に決定する必要があります。
そのため、サイズが動的に変化するデータの格納が少々面倒だったりします。 そこでよく用いられるのが、連結リストと呼ばれるデータ構造です。 殆どの環境ではライブラリとして提供されていますが、勉強もかねて自分で実装してみましょう。 設計
コードを書き始めるまえに、簡単な設計を行いましょう。
この段階では詳細には立ち入らず、データの構造をおおまかに決定すれば十分です。(図 1) ![]() 【図1: 連結リストの構造】 m_lpPrev, m_lpNext に保持します。
(始端ノードの m_lpPrev および、終端ノードの m_lpNext はNULLとする)。リストの本体 (list) は、始端および終端ノードのアドレスを m_lpHead, m_lpTail として保持します (リストが空の場合は、m_lpHead, m_lpTail は共にNULLとする)。だいたいの構造が決まったら、いよいよ実装を始めます。 |
SearchRecent Entries |