\n |
[ トップページ ]
[ ____CommandPrompt ]
[ ____JScript ]
[ ____MySQL ]
[ ____Cygwin ]
[ ____Java ]
[ ____Emacs ]
[ ____Make ]
[ ____Perl ]
[ ____Python ]
[ ____OpenGL ]
[ ____C# ]
[ ____StyleSheet ]
[ ____C++ ]
[ ____Winsock ]
[ ____Thread ]
[ ____VisualStudio ]
[ ____C ]
[ ____Win32API ]
[ ____Lua ]
[ ____PhotoShop ]
ヘッダ検索
■ キャスト(Cast)
DESC
整数のかくあげ
整数を扱う式で, int として表現できる型は int に変換
char, short, bf, enum -> [ int | uint ]
■ 算術変換
unsigned int n = 10;
int i = 0;
for( i=0; i< n; i++ ){
}
■ 代入時の自動的型変換
POINT
キャストとは malloc などでデータ領域を確保し、
その領域をある型の配列などとして
使用するために使うのが主たる使用法
■ 暗黙の型変換
[ == ] は演算の一種暗黙の型変換が起こる
「int型→float型→int型の場合」はbug の可能性あり
有効桁数が少ないfloat型に変数aの「123,456,789」大きなint型の値を代入すると、
有効桁数不足から誤差が発生結果変数b「1.23456792×10の8乗」という値
WARNING
int型とfloat型間の代入では誤差の発生が付き物
コンパイルエラーにはならない
INVALID : 不定
■ 関数型( 関数ptr )の考察
DESC
関数 ptr はキャストすれば
■ ptr < -> integer
POINT
int -> any ptr への変換は OK
DESC
integer 型式は ptr と +- 可能
2. ptr -> int( ptr 表現可能な大きさ )
-> ∵ ( ptr も 整数値 )
3. int -> ptr
4. aPtr < -> bPtr
4. 同一型 obj への ptr の相互変換
{
fooObj *a, *b;
a = b;
}
5. func ptr 同士の変換
int *p;
p + 5;
// ptr を int 型に格納( cast いるかも )
{
int a = 7;
int p = (int)&a;
printf("%d\n", *((int *)p));
}
// 異なる obj 間の ptr 変換 ( mem 配置の整合性があえば OK )
{
typedef struct
{
int a;
int b;
}base;
typedef struct
{
int a;
int b;
int c;
}derive;
{
base b = { 4, 5 };
derive *d = (derive *)&b;
printf( d->a );
printf( d->b );
}
// funcPtr 間の変換
{
int (*fPtr)();
void (*gPtr)(int, int);
// できない ?
fPtr = gPtr;
}
■ int < -> float
DESC
float -> int : 少数部分むし. INVALID( int で表現不能 | -float -> uint )
int -> float : 表現可能な近似値
■ float < -> double
DESC
float -> double : NOCNG
double -> float : 表現可能な近似値. INVALID( float の範囲外 からの変換 )
|
|
NINJAIDX 16