タスクの説明:コンピュータプログラミングは、様々なデータ型、表現及び計算方法をまとめます。フォーカス型変換、数値オーバーフロー及びシフト演算。
A、INT
1、int型のデータ
int型のデータは、メモリで7桁の有効数字を4バイト(32ビット)を占有し、値の範囲は-2 ^ 31 31-1 ^ 2。(符号付き)
0 32 ^ 2までの範囲の符号なし整数
- 表現
全てのビットがINTタイプを占領、左ビットの第1の(すなわち最上位ビット)は符号ビットです。正のためのint型、0の符号ビット、負のための1。32ビットオペレーティングシステムでは、バックレスト31は、数値のビットです。
- 計算
計算補数
2、短いデータ
短い型バイトのデータが2バイト(16ビット)で表されるバイトint型の数を超えない占めません。
3、長いデータ
データは、4バイト(32ビット)を使用して長い(32ビットオペレーティングシステム)を表します
図4に示すように、整数オーバーフロー
符号なし整数オーバーフローのため、オーバーフローが数(8 *はsizeof(タイプ))になり^ 2モジュロ演算を行う
、すなわちをunsigned char型(8ビット)がオーバーフローした場合、オーバーフローは、例えば、モジュロモジュロ256の値になります。
signed char x=0xff;
printf("%d\n",++x); //输出0
/*因为 0xff+1 =256 ,256与256求模取余结果为0*/
符号付き整数オーバーフローのために、結果は、計算の実際の結果であり、
例えば
signed char x=0x7f;
printf("%d\n",++x); //输出-128
/*因为 0x7f+1 =0x80即-128*/
図5に示すように、整数シフト
符号なしのシフトは、論理演算の数がシフトすることにより実行される1
-左<<(シフト論理左)1
最上位ビットを破棄し、最下位ビット0補数
の符号付き数:左端のシンボルがシフトアウトするとき、値の変位オーバーフロー符号が変化してもよいです。
特別な場合:ビットの最大数は、シフト・カウント左ビットこの値のタイプを超えて、ビット数を使用するコンパイラは、型の最大ビット数をダイ、その後残りを取るために左
- >>右シフト(算術右シフト)2
署名された数字:右、0、補正、負S.1に符号ビット。
第二に、浮動小数点データ - 小数点値またはインデックス付きデータ
1、float型
フロートタイプは、値の範囲は4バイト(32ビット)のメモリで、7桁の有効数字を占め-3.40E + 38〜3.40E + 38
- 表現
フロートタイプのメモリ記憶フォーマットを変換するステップは次の通り:
(1)最初の実数バイナリ形式の絶対値、注目整数部と実数のバイナリ法の小数部分。
(2)実数バイナリの形式のnビットだけ左または右に小数点、小数点の最初の重要な桁の右側に移動するまで。
(3)小数点から第1の右二十から三桁の数字に出始めるにビット0を22、デフォルトのシステムは、小数点の前に1を除去します。
(4)実数は肯定的である場合、位置31において「0」に、または中に入れ「」
(5) nを得放置された場合の位置30に、インデックスが正であることを示します、「」
Nポジション30「0」に、0 =右またはN得られた場合
nは、バイナリ1からn減算後、「0」だけ左に残され得られた場合には(6)第23〜29を入れて、7を補完します。7を構成するために与える権利あるいはn = 0、プラスバイナリに左ポスト「0」であるn個あれば、あなたは否定し、最初の23に29を加えるn個になります。
例えば:11.9メモリ記憶フォーマット
バイナリに(1)が11.9程度である「1011
1110011001100110011001100 ....」
(2)小数点は、最初の有効なの右側に3ビットを左:「11100110011001100110 1.011」を 右撮影した過剰を(エラーがここで生産)を確保するために24桁。
(3)既に24桁の有効数字が存在している、左端の数字「1」は「011 11100110011001100110を与えるために除去
23bitの合計」。22は、第1フロート0のストレージ構造の上にそれを置くために。
11.9ので、(4)は正、したがってビットの31個の本当のシンボルに「0」になります。
我々が「1」に左に小数点を置くので、30ビットの指数の符号ビットので、(5)
我々は小数点3の左側にあるので、(6)、そうバイナリに、1 2 3を減算する必要があり、そして23 7 0000010 GET配置29を構成したであろう。
最後に、として11.9を表す:010000010011 11100110011001100110
- 計算
11.9f計算12.0f
12.0fメモリ記憶フォーマットは:010000010 10000000000000000000000
11.9fメモリ記憶フォーマットは:2つの数の01111100110011001100110 010000010可視指数が減算缶の有効数字限り、同一です。
12.0f-11.9f結果:010000010 00000011001100110011010
小数の減少として結果:0.000 = 0.10000038 11001100110011010
同様のダブルデータ場合、その順序コードが11である、1023オフセット、仮数は52ビットです。
2、ダブル型
ダブルデータがメモリ15桁で8バイト(64ビット)を占有し、値が-1.79E + 308〜-1.79E + 308の範囲です。
浮動小数点形式で書かれたプログラムは、一般に、
一部の整数署名。指数部小数部
- 整数部と小数部は、任意であるが、されないことはできません
- 小数点および指数は同時刻なしで行うことはできません
- 指数部eは、整数に続いて、文字またはEで始まるです
図3に示すように、浮動小数点オーバフロー
浮動小数点オーバフロー場合、無限大の値を与えられた、のprintf関数ショーはinf。
浮動小数点アンダーフローの場合、インデックスは最小部に到達した、コンピュータが仮数部右側にあった、最初の場所で空いたバイナリは、最後のビット2進数を落としました。
小数で、例えば4つの有効数字(例えば、0.1234E-10)を10で割ったが、結果は、結果が得られているが0.123E-10であるが、計算過程で効果的に元の尾を失った数にサイト上での数字。オーバーフロー(アンダーフロー)*** ***この場合に呼び出されます。
通常より***以下と呼ばれるC言語型の浮動小数点値の損失が***完全精度浮動小数点値。したがって、最小の正の浮動小数点数は、通常よりも低い値を得るために2で割られます。原因になります非常に大きな値で割った場合は、すべてのビットが0です。
図4に示すように、シフト操作
C言語では、浮動小数点シフト動作をサポートしていません。
第三に、文字データ
1、char型
char型データメモリに1バイト(8ビット)を占有する
ASCII文字の内部を表す文字データのためのものである
ASCII文字の整数で255 0〜127または-128とみなすことができます
- 表現
C言語では、メモリ内の実際の文字データは、バイナリ形式で格納されています。
- 計算
また、位相の減算時の文字データは、システムは、最初の文字データは、int型の位相加算および減算に変換見えない方法を入力します。
第四に、型変換
図1に示すように、自動型変換
様々な種類の混合動作中のすべてのデータは、コンパイラが自動的にデータ型が同じタイプの操作に参加する変換された後、計算される変換されます。次のように変換規則は、次のとおりです。
- データ変換はそれを確実にするために増加する値の長手方向に行わない歪みまたは減少精度。コンピューティングおよびlong int型に関与する場合、例えば、データ転送動作のINT第一のタイプは、長い前と同じように行きました。
- すべての浮動小数点演算を偶数のみフロート式動作場合、倍精度で実行され、それは最初の操作を行うために、ダブル型に変換されなければなりません。
- CHARおよびコンピューティングに関わる短い時間では、int型に変換する必要があります。
2、キャスト
キャストプログラマが明示的に述べたように、コードの一つのタイプは、特定のフォーマット変換により示される必要があります。つまり、プログラマはキャストプログラマが介入しなければならない、自動型変換の介入を必要としません。