孟新しいC ++の基本的なタイプは、ルックは要約を後悔するしないでください

ここに画像を挿入説明


       C ++の基本的なタイプには、文字、ショート、整数、長い、ラン・ラン(C ++ 新しい)を、ダブル、フロート、BOOL、これに加えて、2つの浮動小数点型が署名されて二重、folat添加とunsigned型、なぜ無符号なしの型へと12の基本的な型、浮動小数点の合計を言うことである、と言うことになります。

0フロート

だけでなく、長い二、これらの本は、上記で説明したように、私たちは話の焦点を迎え、行くことはありません、フロートフロート、ダブルを含みます:

違いは何ので、単精度および倍精度の浮動小数点、ダブル単精度および倍精度フロート?
それは、前者が16ビットである8つのバイトを占有する4バイト、有効数字の前の8ビットを占め、異なる範囲が存在することです。
だから、これは明らかに私たちが望む答えではない、例えば、私はあなたの例を与えます:

 float number_1 = 123456789.123456789;
 float number_2 = 123456789.123456789f;
 double number_3 = 123456789.123456789;

結果:
ここに画像を挿入説明
これであなたはまだ単精度および倍精度の理解を教えて?私は多くの人々はまだこれだけのために単精度および倍精度の名前を知っていると信じていますが、特定の意味を知りません。

それは32または64であるかを特定知りたい、我々は、符号ビット、指数、及び仮数ビット構成で構成され、フロート、ダブル、フロート32ビットを定義IEEE754標準、二重の64ビットを調べる必要があります:

符号ビット 指数ビット 仮数ビット
浮く 第31(1ビットを占めます) 30から23(表わす8ビット) 20〜0(アカウンティング次の23ビット)
ダブル 第63(1ビットを占めます) 62〜52(を表す11ビット) 51〜0(会計52bit)

正と負があるので、それは-128から127、標準オフセットフロート127、即ち-1-127〜255-であり、範囲の指数部、フロート指数部8ビット、即ち0〜255を参照128から127 -128。

範囲-2 ^ ^ 128-2 128は、十分な大きさがありませんか?それはあなたの身近な-3.4E38に+ 3.4E38にほぼ等しいです。

そのフロートは以下8,388,607以上の8つの小数点まで表現できるように、仮数精度範囲を参照して、図23に示すように、最大​​数は2 ^ 23-1 = 8388607、すなわちフロート仮数の値は、それが正確に表現できないこの値を超えるで表すことができしかし絶対的に保証は8ビット精度の理由フロート7であり、7です。

同様に、二種類のインデックスの11ビットは、範囲内にある-2 ^ 1023年2-2 ^ 1023年 2両方に精通し-1.7E用+ 308〜1.7E + 308。
= 4503599627370495 2 ^ 52-1の範囲の精度、16ビット。したがって、最高レベル16の精度は、二重理由精度が15〜16ビットをどのビット、15を保証することができるであろう。

図8は、単精度と倍精度16の原点です。

1.様々な種類のメモリサイズの問題を取り上げます

以下のコードを初めて目。
 

 char c = 'a';
 short s = 1;
 int i = 1;
 long l = 1;
 long long ll = 1;
 double d = 1.0;
 float f = 2.5f;
 bool b = 0;
// 在你的机器上面占用多少字节,具体可以使用sizeof运算符得到:
 std::cout << sizeof(c);
 std::cout << sizeof(s);
 std::cout << sizeof(i);
 std::cout << sizeof(l);
 std::cout << sizeof(ll);
 std::cout << sizeof(d);
 std::cout << sizeof(f);
 std::cout << sizeof(b);
 //运行结果为1,2,4,4,8,8,4,1

そして、誰もが、理解し、異なる種類のメモリサイズを占めるのletのに来ます。

这里有一个误区:在不同的编译器,每个类型占用的内存可能是不同的,这和编译器有关,一个类型占用多少字节由编译器在编译期间决定,并不和系统是否是32位和64位有关,不要以为在16位机器上就是16位,在36位机器上就是32位。

あなたは、<limits.hに>ヘッダファイル、INT、及びマクロサイズの他のタイプは、<limits.hに>によって決定さで定義されて見ることができます。

INT_MAX
//随便写一个定义的常量,鼠标右击转到声明可以跳到limits.h头文件查看,如下:

ここに画像を挿入説明
だからここに私はもはや腐っアベニューの最大値、最小値を表示されないのです。
私はちょうどあなたが言っている、この値は取得する方法でなければなりません。これらを知っている、だけでなく、理由を知り。
intは4バイトであるので、例えば、私たちは、charは1バイト、256個の組み合わせを持つことができるバイト8であることを知っているが、256 * 256 65536に等しく、我々は理解してこの種のものは、最大値をバックアップする必要はありません、のようなものです値、最小値は、どれだけ十分に取得します。


差2.sizeofとはstrlen

然后说一下sizeof和strlen的区别,可能有很多萌新记不住这两个的区别:

sizeof()は、関数ではなく、なぜなら関数として、その長さ、コンパイル時にそのような、はsizeof値が一度計算される上に、パラメータの数>基、ポインタ、オブジェクト、関数、とすることができる等ではなく、操作者であります等、その機能は、ポインタとバイトサイズの他のタイプのアレイを得ることです。
配列-配列割り当てられた領域のコンパイル
によって使用される記憶空間へのポインタ-ポインタ
タイプ-空間のこのタイプにより占有
物体-空間の実際のサイズは、オブジェクトによって占有
機能-スペースのタイプの関数は、戻りによって占めサイズ、場所自然がvoid戻り値の型はできません

STRLENは()関数のプロトタイプのために実行するための時間を計算する機能、パラメータの必須の文字ポインタ(文字*)、次のとおりです。
Check_return size_tの__cdeclはstrlen(In_zのconstのchar * _STR);
関数は、関数は、文字列の長さを返しますで、文字列は、それがランダムアクセスメモリであってもよい独自で定義することができる、機能は、実際にトラバース列の最初のアドレステーブル>から、公知の遭遇ターミネーターNULL、戻り長に代わって機能を実行しますNULLを含みます。

 char * ch = "nihao";
 std::cout << strlen(ch);
 // 结果为5

3.プラスチックリテラル

C、C ++と同じ整数を書き込むための書き込みの3つの異なる方法があります。
1.最初のビットが1〜9である場合、2つまたは塩基を識別する数値定数を使用する前に、ベース10は、小数で書かされます。
前記第1のビットは、第1〜7であり、0であれば、ベースが進である、8です。
3. 0Xまたは0Xの最初の2ビットは16進数に相当する塩基16は、前記した場合。

 int number_1 = 66;
 int number_2 = 066;
 int number_3 = 0x66;
 std::cout << number_1 << std::endl;
 std::cout << number_2 << std::endl;
 std::cout << number_3 << std::endl;

結果は:
ここに画像を挿入説明
いくつかの場所で、それを書くための方法のこれらのタイプを持っているが、オクタル使用するか、16進数表現することですなぜ、私たちは直接の表現に割り当てられた番号を使用することができ、小数に変換することなく、簡単に言えば、それは容易にすることで、怠惰であることを、順番に、識別バンドを入力することがあり、順番に、C ++はまた、異なる方法のバイナリ出力を提供していますが、C ++は、デフォルトの出力10進数の小数は、デフォルトの出力モードを変更したい、あなたはCOUTを使用する必要があります特別な機能のいくつかは、ヘッダファイル入出力ストリームが提供する12月、HEX、10月、10進数、16進数と進を表すために使用されます。

 int number_1 = 66;
 int number_2 = 066;
 int number_3 = 0x66;
 std::cout << std::dec;
 std::cout << number_1 << std::endl;
 std::cout << std::oct;
 std::cout << number_2 << std::endl;
 std::cout << std::hex;
 std::cout << number_3 << std::endl;

結果:
ここに画像を挿入説明

需要注意的是在修改之前,之前修改的格式会一直生效。


シンボル型ケースとの間の4持って動作

       sizeofを有し、strlenを、長さの基本的なタイプを継続し、バイトがあると言うことである基本的なコンピュータ・メモリ・ビット(ビット)の単位、バイトの8ビット0と1は、それぞれ二つの組み合わせを有する、あります 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 256組み合わせ。sizeofチャーバイトを使用して得られた上記、浮動小数点除算を持つか否かコンプライアンスに加えて、上記すなわち、char型は、0から255又は127 -128に表すことができ、2バイトであり、残りはタイプを持っています我々はアプリケーションシナリオに応じて、または符号なしのラインを持っている必要があるように、また、サポートすることができます-128〜127、0から255までcharでサポートされている記号、に沿って、どの部分を持っていません。

执行运算时,如果一个运算数是有符号的,而另一个是无符号的,那么C/C++会隐式的将有符号参数强制转换为无符号类型,并假设这两个数都是非负数。
当两种类型进行混合运算时,运算结果为正数时,结果不会出现异常,当运算结果为负数时就会出现异常结果,而且异常的结果往往很大。

 unsigned int usa_1 = 10;
 int sa_1 = -100;
 unsigned int usa_2 = 10;
 int sa_2 = -5;
 std::cout <<usa_1+sa_1;
 std::cout << usa_2 + sa_2;

結果:
ここに画像を挿入説明


5.シンボルタイプの存在または非存在との間の遷移

      その下にその行く以外にも、我々は、前とバイナリ01との間の変換を、ある符号なしの型、数間の変換に合わせてそれを言った私たちは、元のコード、アンチコードおよび補完を検討する必要があると述べています:
元のコード:
元のコードは、符号ビット、例えば8バイトなど、別の値を表すビットを表すために使用される最高のシンボルです。

1元のコードは00000001であります

図1は、負のオリジナルコードである10000001

抗コード:
反転の表現は、正の数自体反転し、元のコードに基づいて反転負は、符号ビット、否定残りのそれぞれの数を変更します。

ポジティブ抗コードは00000001 1であります

図1は、11111110反転負であります

補足:
表現の補数は、独自のを補完し、負の補数はそのままビット符号の元のコードの基本である、あなたの残りの部分は否定、1 +最後、つまり、反という正の数であります+1の数に基づいて:

N-1補数000000001

1の補数負111111111

抗コードのレビューが元のコードを補完した後、我々は言います:

1.符号なし、負のポイントが存在しない場合、すべてのビットは、それ自体を表すために使用されます。
正および負の最大値を示すために使用2.符号付き数は、最大ビット数が負の数で表され、0は正数を表します。

符号なしにはシンボリックな数値の3つの手順を変換したい:
符号なしの最大数1.ルックは1です。
2.それは、直接符号付き等しい符号なしの数1ない場合。
3.最上位ビットの符号なし数は数が符号付き数であり得、次いで、符号なしの補数をとり、1の場合。

例えば:

符号なしの数10は、符号付き数値に変換される
符号なし2進数10が書き込まれ:00001010
3つの段階プロセスに従って得られる:
署名されたバイナリ数10書かれている:00001010
または10

署名されたとして符号なしコンバータ129
129に記述された符号なし2進数:1000 0001
得られた三段階法:
アンチコード:11111110
補:1111 1111
シンボルに変換されるが、表し-127

同様に、3つの手順を必要としますが、符号なしに変換する署名数は、:
シンボルの最上位ビットに1ルックは1、されていない
シンボルの数に直接対応する、2。そうでない場合は1(0)数に署名し、
シンボル1の最上位ビットは、その後、署名された数値を補完取る3.場合、得られた数値は、符号なしです。

例えば:

-7符号付き数は符号無しに変換され
10000111:書かれた署名されたバイナリ数-7
得られた三段階法:
アンチコード:11111000
補:11111001
すなわち249符号なし
ここに画像を挿入説明
和があれば、符号ビットを参照することです1、抗コード補完に取り組むために、負の数としてそれを置きます。


6.なぜ異常に大きな数値結果があります

上記の文章は、そう言って覚えておいてください操作の結果が表示されます場合は、異常結果が否定的で、かつ異常な結果がしばしば大きく、今、私たちはこの問題に対処する必要があります
、よく理解しに来て、私たちは車の走行距離計として、範囲変数を置くことができてくるが、実際にそうである、文字を取ることです。
ここに画像を挿入説明
これはまた、なぜunsigned int型を説明しますusa_1 = 10、int型sa_1 = -100合計は大きな数になり、多くの場合、最大値プラス1話がゼロになると言われています。

7.なぜ分裂または浮動小数点型記号なしではありません

:仕上げのシンボルタイプかどうか、私たちは記事の冒頭放置は存在または不在のない浮動小数点除算記号が存在しない理由の問題と言った
あなたは、符号なし使用したいが、それはデータの最高の表現はむしろマイナスよりも、使用することを意味し、フロートは、定義の中で参照すべきこととして、自分自身を表示するには、以下のリンクをクリックしてください、符号ビットでなければならない第一のデータメモリの規定で定義されているので、2つの相反するさ:
定義浮動小数点数

そこINTのサイズその後、出ていたが、その後、測定のsizeof使用、folat符号なし二重に定義され、自動的に誤りなく符号なし整数型に変換され、符号なし、いくつかのコンパイラであり、すなわち4。


公開された75元の記事 ウォンの賞賛189 ・は 40000 +を見て

おすすめ

転載: blog.csdn.net/Fdog_/article/details/105232314