Cデータ型変換


コンピュータは、演算を行う際に、各タイプはオペランドが直接関与したデータの同じサイズ(ビット数記憶されている)とストレージ、意志はないCHARタイプ(1バイト)データ型int(2、4または8バイト)を有する必要ストレージのさまざまな方法による、またINTダブルデータを直接計算に関与することができ、操作。

しかし、動作を混合異なるタイプのデータを可能にする発現又は文のC言語の柔軟性。

Cコンピュータ言語の機械的柔軟性は、悪い治療として、誤った結果を生成する、矛盾です。暗黙的に変換と呼ばれ、プログラマの介入なしに、コンバータのコンパイラの特定の種類のために自動的に実行することができる自動変換、および変換のいくつかのタイプが参照され、明示的変換のこのタイプを指定するには、プログラマを必要とキャスト

自動型変換

発現の異なるタイプの混合操作は、より高い変換型自動型に低下が発生します。

一般に、より大きなデータの範囲と精度そのデータの異なる種類の違い、データ、精度が高いほど、タイプの範囲「高」。

ローからハイに整数型のレベルを次のように

署名char->符号なしchar->短期>符号なし短期> INT->未署名のINT->長期> unsigned long型

次のようにローからハイにフロートレベル:

フローティング状態>ダブル

我々はそれを言及していない、浮動小数点型が推奨されていません浮きます。

図1は、いかなる浮動小数点オペランドデータが存在しません

チャーは、unsigned char型は、短い、または符号なしの短絡が発現に関与する計算で発生した場合、一般的に自動的にint型に変換しました。

unsigned int型の整数演算を混合する場合、int型は自動的にunsigned int型に変換されます。

int型、unsigned int型および動作を混合する長い時間が、long型に変換されます。

図2に示すように、浮動小数点オペランドデータ

浮動小数点データの数が運転中に含まれる場合、両方のオペランドは、二重に変換されます。

例えば:

int ii=100;
double dd=200.5;
ii+dd;

上記演算式はddは二重オペランドとして、それは最初の動作の後に二重フロートII参加に変換され、倍精度浮動小数点演算の結果は300.5です。

3、シンボル割り当て操作矛盾両方のタイプ

正しい値である場合(定数、変数または式であってもよい)、代入演算子は、値型の左側に低下左/値型のタイプと右値型リフティングと矛盾しています。例えば:

double dd;
dd=10;  // 右值为双精度,左值为整数

左辺値は、倍精度浮動小数点をddをするので、その10は倍精度浮動小数点に昇格した後、ddに割り当てられた整数定数の後に正しい値を入れて、だけでなく、失うことはありませ精度が、精度向上を行います。

int ii;
ii=10.5;   // 右值10.5为双精度,左值为整型

左側の値整数10.5右辺二重還元、すなわち小数部分が10.5廃棄され、II整数変数に割り当てられ10、この状況は、精度を失うことになります。

値型の範囲を超えて4、左右の値

最悪の場合は、左右の値を超え代入演算子の範囲タイプの値の範囲を示し、値が右、左に割り当てられた値をカットします。結果は無意味かもしれません。例えば:

char c;             //  char占8位,取值范围是-128-127。
c=1025;             //  整数1025 对应二进制形式是100 0000 0001,超出了8位。
printf("%d",c) ;  //  以十进制输出c的值

出力値無意味を得るために、文字変数Cに割り当てられた下位8ビット0000 0001 1025(1の値)のみを取るので、1です。

第二に、キャスト

使いやすい手動の介入なしに自動変換、が、しかし、自動型は下部型変換型に高いから変換された場合は特に、長所と短所があり、切断またはデータの精度を低下させるであろう、期待される結果が得られないことがあります。

より柔軟なプログラミング、より明確な転換のオブジェクトを作成するプログラムの型変換の設計者に多くの制御権限を提供するために、C言語は構文が明示的変換の種類を指定することも提供し、一般のキャストと呼ばれます。

キャスト・フォーマット:

(目标类型) 表达式;

例えば:

int a,b;
a=4;
b=3;
double dd;
dd=a/b;            // dd的结果将是1。
dd=(double)(a/b);  // dd的结果是1.000000。
dd=(double)a/b;   // dd的结果是1.333333

DD = A / B、DD結果は1であり、これは十分整数または除算なし小数部分整数整数として、次のことを理解されたいです。

DD =(ダブル)(/ b)は、DD結果は1.000000、理解するのが困難であり、その動作プロセスです。

(1)第一/ Bを計算し、結果は1の整数です。

(2)は、1.000000であり、整数倍に変換します。

DD =(二重)/ bの、1.333333結果ddは、これは十分に理解されていないが、その動作プロセスです。

(1)最初の実行(ダブル)、4.000000、すなわち、二重に変換します。

(2)自動型変換のルールを遵守し、得られた4.00000、1.333333を3で割りました。

問題は、プログラマが知っている優先順位または/ B優先度(ダブル)ではありません、最良の方法は、その疑いがある、()(ダブル)/ Bのように書かれている、もあります。

第三に、宿題

サンプルプログラムを作成し、このセクションは再びすべてのデモの知識を説明し、デモ・プログラムは、ご理解とマッピングを深めることができます。

第四に、著作権表示

C言語Technology Networkのオリジナルの記事、論文、著者と元にソースリンクを明記してくださいを再現。
出典:C言語テクノロジーネットワーク(www.freecplus.net)
著者:倫理コード農業

記事の誤字、またはコンテンツのエラー、またはその他の提案やコメントは、正しい私にメッセージをお願いした場合、どうもありがとうございました!

元の記事を公開 ウォンの賞賛2 ビュー6733

おすすめ

転載: blog.csdn.net/u010806950/article/details/105043999