トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ 型(Type)


  DESC
    型とは Address がさすビット列データの意味のこと。
    Object がもつことができる[ 値の集合 ]と, それに適用できる演算を決めるもの


    Computer で扱う Object は変数と定数のみ
    定数は. int 型である

    // 整数とみれば, 64
    010101010

    // char という意味でみれば 'A'
    010101010
___

■ 整数

int が 4byte の場合では, -2億 - 2億 の範囲の値の整数を扱うことができる。 C にある 型は 4 種類
            char  : 1 byte
            int   : ハードウェアが扱う整数
            float
            double
さらに修飾子がついて long short ( 整数型のみ有効 ) int は HW( 計算機によって異なる ) Compiler は HW の仕様にあわせて, int のサイズを決めることができる。 C の仕様では以下の規則しかない。 int のサイズが 4 byte というのも厳密には保障されない。
       short < = int < = long 
WARNING int は掛け算が苦手なので、int の範囲を超えるような掛け算をする場合は float 型をつかう
    // BAD
    int i = 50000;
    printf( "%d\n", i*i );

    // OK
    float f = 50000;
    printf( "%f\n", f*f );
___

■ size_t

POINT 符号なし整数 を typedef したもの そのため厳密には環境ごとで型のサイズがことなる。 32bit 環境ではたいてい unsigned int ( 4byte )
___

■ float

基数表記 0.5を浮動小数点数で表すと、基数が10の場合は5.0×10-1(5.0e-1)、基数が2の場合は1.0×2-1となる。
    1e-6f
WARNING
  float に誤差が発生するため(float という表現) a = 0.1; if( a == 0.1 )
WARNING 扱える値の範囲を大きくしたかわりに 精度を犠牲にしているので 大きな値と小さな値を同時に利用しないこと。 float も int も 4byte なら扱える値は同じ数しかということ。
    float f = 50000;
    float f2 = f*f;

    // 2500000000.000000
    printf( "%f\n", f2 );

    // +1 は精度が足りないため, 丸められる。
    // 2500000000.000000
    f2 = f2 + 1;
    printf( "%f\n", f2 );
カウンタとして利用すると 1600 万あたりで増えなくなる。
    float f = 0;
    int i = 0;
    for( i=0; i< 1024*1024 * 24; i++ ){
      f += 1;
    } 

    // 16777216.000000     25165824
    printf( "%f  %d\n", f,  i );
___

■ boolean とは

定義: false 0: true 未定義 正しい例 if( status_check() ) 理由 zero 比較の結果は簡単に作成できるが、それ以外の値の比較は operation がひとつ増える
___

■ uintptr_t

DESC ptr を 整数に変換する 問題は ptr size が int と同じサイズとは限らないこと 64 bit binaryでは, sizeof(int) = 4, sizeof(void *) = 8 int 型も Compiler により, 64bit 環境では size が異なるらしい GCC : sizeof ( int ) = 8 VS : sizeof ( int ) = 4 DEP C99 stdint.h::intptr_t, uintptr_t TIP 32bit ptr から u64 に変換する際は 上位に 1 bit がはいらないように uintptr_t に変換する WARNING ptr を Int 型に cast していると, 64 bit では 上位 bit がなくなる
  // ERROR
  // 0x80 00 00 00 が負の整数として扱われる
  // 64 bit に 拡.張 されるとき 上位 bit に 1 がはいる
  void *p = (void *)0x80000000;
  uint64_t x = reinterpret_cast<  uint64_t >(p);

  //    OK
  // 上位に 1 bit が入るのを避ける
  uint64_t x = reinterpret_cast<  uintptr_t >( p );
VisualStudio では次のように定義
    #ifdef  _WIN64
    typedef unsigned __int64    uintptr_t;
    #else
    typedef _W64 unsigned int   uintptr_t;
    #endif
___

■ __int64

DESC C、C++における非標準の変数型で、64ビット長の整数を宣言する。 Microsoft C/C++やBorland C++Builder、その他の環境でこの変数型に対応している。 gcc は対応していない。 POINT 非標準の型であるので, Visual C++ 以外の環境では利用できない。 32bit 環境でも利用できる。64bit 環境ではレジスター1本ですむが、32bit環境では2本使う。 内部では32ビット×2で処理される。
    __int64 num;
    num = 0x1122334455667788i64;

    _num$ = -8
    mov DWORD PTR _num$[ebp], 1432778632
    mov DWORD PTR _num$[ebp+4], 287454020

___

■ __int32

DESC __int64 と同じく Visual C++ 固有の 32bit の整数型
___

■ wchar.wchar_t

ANSI C は標準でワイド文字をサポートしている
___

■ MultiByteCharacter.とは

英数字や一部の記号を 8bit ひらかな.漢字を 16 bit で表現 MS-DOS の時代から使われている Shift-JIS を使ったモ−ド
___

■ WideCharacter.とは

1文字表現するのに2バイト用いる文字のこと なぜ Wide 文字ができたか ? 1 Byte だけでは中国語や日本語のような 漢字や記号を多く持つ言語を表せないから. WideCharacter は国際的なアプリケーションの開発には必要な知識 UNICODE も WideChara のひとつ( 一例にすぎない ) ワイド文字の型は wchar_t であらわす // WCHAR.H typedef unsigned short wchar_t; // 実体は unsigned short ワイド文字型で文字列を表現してみましょう ワイド文字として文字列を格納するには、文字列の前にL(Long)プレフィックスを指定する wchar_t wc[] = L"test"; ワイド文字列は、必ず 1文字 2バイトの領域を確保する VC で L"aiueo" とすると utf-16 で Encode される
















NINJAIDX 16