C言語の整数

まず、整数の概念

また、一般的にデータのプログラム、変数の整数を定義するためにint型のキーワードを使用してC言語(intは整数の略である)として使用され、一般的に生活の中で使用されるデータ型整数です。

変数の定義では、彼らは、修飾子の署名、符号なしの短期および長期の4種類を追加することができます。

署名付き:署名し、それは正と負の数を表すことができます。

未署名:署名のない、唯一のそのような人の高さ正の数、例えば、配列インデックスであってもよいです。

ショート:ショート、今主流の64ビットオペレーティングシステムの下で、メモリ4を用いた4バイトの整数、のために
2つのバイトをアイドル状態になり、より小さな保存するのに十分な-byteの整数を、これらのバイトは無駄にされていますA。早い段階で、またはマイクロコントローラおよび組み込みシステムでは、メモリリソースは、非常に希少なC言語が発明された可能な限り保存するメモリ内の全てのプログラムです。

ロング:長い、長い整数。

第二に、範囲の整数

コンピュータのオペレーティングシステムとC言語コンパイラ関連しない固定値の範囲の整数、我々は、その値の範囲を推測するために、そのメモリサイズに応じことができます。

バイトは8ビットを有し、それは2であるデータの範囲を表す。8 -1、すなわち、255。

メモリは2つのバイトによって占有されている場合、符号なしの範囲は2 。8 Ⅹ2 8 -1。

メモリの量は4バイトである場合、符号なしの範囲は2 。8 Ⅹ2 。8 Ⅹ2 。8 Ⅹ2 8 -1。

メモリの量は8バイトである場合、符号なしの範囲は2 。8 Ⅹ2 。8 Ⅹ2 。8 Ⅹ2 。8 Ⅹ2 。8 Ⅹ2 。8 Ⅹ2 。8 Ⅹ2 8 -1。

それが署名されている場合は符号が場所を占めているため、範囲が半分になります。

以下のサンプルコードは、整数のメモリサイズの種々のテストに使用します。

実施例(book60.c)

/*
 * 程序名:book60.c,此程序演示整数占用内存的大小和取值范围。
 * 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main()
{
  short si;   // 短整数
  int   ii;   // 整数
  long  li;   // 长整数

  printf("sizeof short is %d\n",sizeof(short));
  printf("sizeof int is %d\n",sizeof(int));
  printf("sizeof long is %d\n",sizeof(long));
}

業績

ここに画像を挿入説明

sizeofは、メモリ内のsizeof実際に取得されたデータストレージスペースはバイト単位で、占有、C言語、演算子ではなく、機能のキーワードを予約されています。

int ii;       // sizeof(int)和sizeof(ii)都可以。

テスト結果book60.cによると、私たちは、整数の範囲の多様性を得ることができます。

タイプ速記 完全な名前を入力します 長さ レンジ
ショート [署名された】ショート[INT] 2つのバイト -32768〜32767
符号なしshort 符号なしshort [INT] 2つのバイト 0〜65535
int型 [署名付き] INT 4つのバイト -2147483648〜2147483647
unsigned int型 符号なし[INT] 4つのバイト 0〜4294967295
長いです 長い[署名付き] [INT] 8つのバイト -9223372036854775808〜9223372036854775807
unsigned long型 符号なしlong [INT] 8つのバイト 0〜18446744073709551615

注意:

修飾された符号付き整数値が倍以上の正の整数を表現しながら、1)最高レベル表現するシンボルとコンピュータ、符号なし整数、修飾符号ビットを必要としません。

プログラムを書くとき2)、テーブルブラケット[]書かれた言葉を省略することができます。

プログラムを作成するとき、整数変数への割り当ては、エラーが発生し、次のコンパイル時に似た変数の範囲を超えることはできません3)、プログラムはまた、予後を実行しない結果を有していてもよいです。

ここに画像を挿入説明

4)今、価値のないコンピュータのメモリ、それは推奨される以下の短いプログラマ、注意のint、long多目的は、メモリはすべて安定プログラム上、問題ではありません。

第三に、整数の出力

次の表は、過去20年間、第一および第二列の小数点以下の出力形式を覚えておくことが重要である、我々は気にして進していないので、私は、のみ表示メモリアドレスで見られる16進数を使用したことがない8進数六角関連の知識と理解をすることができます。

ここに画像を挿入説明

出力フォーマット制御文字の種類は、変数の型に最適に対応する、そうでなければ意図しない結果が存在するであろう、例えば:ピットのことに注意してください。

int i=32767;
printf("i %hd,%d\n",i,i);
int j=32768;
printf("j %hd,%d\n",j,j);

出力:

i 32767,32767
j -32768,32768     // 得到了意外的输出结果,32768超出了short的取值范围。

短整数を出力する%HDは、最大値は32767、32767を出力することができるではなく、通常の出力32768。

第四に、書き込み2進数、8進数と16進数

デフォルトでは、小数点以下の桁である任意の特殊な書式ない10進数を表します。しかし、バイナリを表し、8進数または16進数の数が同じではない、と区別する小数、具体的には、ある特定の文字と数字の前され、特別な文言のいくつかの種類でなければなりません接頭辞。

1、バイナリー

0と2つの2進数字の1は、例えば、使用の開始時0Bまたは0B(ケース小文字を区別しない)でなければなりません。

// 以下是合法的二进制
int a = 0b101;      // 换算成十进制为 5
int b = -0b110010;  // 换算成十进制为 -50
int c = 0B100001;   // 换算成十进制为 33
// 以下是非法的二进制
int m = 101010;  // 无前缀 0B,相当于十进制
int n = 0B410;    // 4不是有效的二进制数字

標準のC言語は、バイナリの文言上のサポートされていないことに注意してください、しかし、自分自身だけ延長されたいくつかのコンパイラは、進数をサポートしてください。言い換えれば、すべてではないのコンパイラは二進数、コンパイラのサポートの一部のみ、およびコンパイラのバージョンとの関係をサポートしています。

2、オクタル

0〜7までの8進数8桁からは、0(0であることに注意してください数ではなく、文字O)で始めなければならない場合、例えば:

// 以下是合法的八进制数
int a = 015;      // 换算成十进制为 13
int b = -0101;    // 换算成十进制为 -65
int c = 0177777;  // 换算成十进制为 65535

// 以下是非法的八进制
int m = 256;  // 无前缀 0,相当于十进制
int n = 03A2;  // A不是有效的八进制数字

図3に示すように、進

16進数字0〜9によって、文字A〜FまたはF〜(ケース小文字を区別しない)組成物は0Xまたはなければならない0X例えば使用の初めに(ケース非感受性):

// 以下是合法的十六进制
int a = 0X2A;   // 换算成十进制为 42
int b = -0XA0;  // 换算成十进制为 -160
int c = 0xffff;   // 换算成十进制为 65535

// 以下是非法的十六进制
int m = 5A;    // 没有前缀 0X,是一个无效数字
int n = 0X3H;  // H不是有效的十六进制数字

4、ピットは、そのノート

現実の生活や仕事では、我々は、ALIGNまたはその他の理由のために、小数点以下の数字を書き、それに加えて目の前の値0は問題ではない、しかし、小数番号の前に0を追加しないC言語で、それはコンピュータのエラーになります8進数と考えます。

五の一般的に使用されるライブラリ関数

C言語には、いくつかの一般的に使用されるライブラリ関数は、次のステートメントを提供します。

int  atoi(const char *nptr);  	// 把字符串nptr转换为int整数
long atol(const char *nptr);     // 把字符串nptr转换为long整数
int  abs(const int j);            // 求int整数的绝对值
long labs(const long int j);     // 求long整数的绝对值

実施例(book61.c)

/*
 * 程序名:book61.c,此程序演示整数的atoi atol abs labs函数的使用
 * 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <stdlib.h>   // 如果不包含这个头文件,会出现意外的结果。

int main()
{
  int  ii;
  long ll;

  ii=atoi("-2147483647");
  ll=atol("-9223372036854775807");
  printf("ii=%d\n",ii);
  printf("ll=%ld\n",ll);

  ii=abs(ii);
  ll=labs(ll);
  printf("ii=%d\n",ii);
  printf("ll=%ld\n",ll);
}

業績

ここに画像を挿入説明

第六に、データ型の別名

; 2)より多くのプログラマダイエットに沿った1)短い名前:typedefをC言語では、プログラマは、一般的に二つの特徴を持つデータ型の別名を定義するためのキーワードを使用することができます。

たとえば、size_tのunsigned int型の別名から。

typedef unsigned int size_t;
size_t ii; 等同于 unsigned int ii;

戻り値strlenを助けstrlenを機能で見てみましょうは、size_t型です。

ここに画像を挿入説明

七つの乱数

実際の開発では、この機能は、たとえば、あなたがゲームのようなプログラムを書くときに乱数を使用する必要があり、乱数を使用します。

図1は、乱数を生成します

C言語では、乱数を生成する<STDLIB.H>ヘッダファイルにsrandとrand関数を使用します。

void srand(unsigned int seed);   // 随机数生成器的初始化函数
int  rand();                        // 获一个取随机数

srand関数は、次いで得られた種子は、異なる実際の開発では、我々は、それぞれ異なる植え付け時間限り、パラメータとして時間を使用することができ、(一般的に種として知られている)乱数生成器を初期化するために、最終的な乱数は、通常我々が使用する、異なります<TIME.H>ヘッダ・ファイル機能は、第二のシードとして時間に正確な時間を取得します。

実施例(book63.c)

/*
 * 程序名:book63.c,此程序用于演示随机数
 * 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  int ii;

  srand(time(0));  // 播下随机种子

  for (ii=0;ii<5;ii++)  // 生成5个随机数
  {
    printf("%d ", rand());  // 获取随机数
  }

  printf("\n");
}

業績

ここに画像を挿入説明

図2に示すように、乱数発生の範囲

実際の開発では、多くの場合、乱数発生の特定の範囲に対して一定範囲内で乱数を必要とする、それはいくつかの技術を使用することが必要であり、一般的に使用される方法はモジュロ演算(余りをとる)、プラス加算器です。

int a = rand() % 50;   // 产生0~49的随机数

あなたは上の規定を制限する場合:

int a = rand() % 51 + 100;   // 产生100~150的随机数

51 + 100、ランド()%51は、乱数が最小バック+100が最大50 + 100 = 150であり、わずか100であることを確認するために、0〜50で生成剰余モジュロすなわち、ランド()%を取ります。

八、宿題

1)サンプル・プログラムの準備は、短いバイト数、符号なしの短い、int型、長いunsigned int型、符号なしのロングメモリ集約を決定します。

2)複数の選択肢の質問:値の範囲はint型のでしょうか?

(A)以上の20億(B)-2147483648〜2147483647©0〜4294967295

3)複数の選択肢の質問:ウィル値の長い範囲はどのくらいですか?

(A)(B)十分に大きい©-9223372036854775808〜9223372036854775807000000多く

4)文字列変数に格納されているサンプル・プログラムの準備、界面から数値文字列入力、およびその後ATOI機能、画面に結合され、出力100によって整数に変換されます。

5)C言語では、long int型の整数があります長いです、あなたがプログラムを書く、それは彼らが実用的な価値を持っているかどうかメモリテストとバイト数の範囲を占めており、長い長いint型タイプの熟考。

6)サンプルプログラムの準備、テスト短い、符号なしshort、int型、符号なし、長い、影響の範囲を超えた符号なしlong割り当てが。

7)以下のように関数、関数宣言を達成するために、ABSおよびライブラリ関数整数ラボを書き換えます。

int   ABS(const int j);                 // 求int整数的绝对值
long LABS(const long int j);           // 求long整数的绝对值

8) '、関数名はctoiで、文字 '0'、 '1'、 '2'、 '3'、 '4'、 '5'、 '6'、カスタム関数を既に学習した知識を用いて7 '' 8 '' 9「0,1,2,3,4,5,6,7,8,9は整数に変換されます。関数の宣言は次の通り:

int ctoi(const char chr);
chr为用字符方式表示的数字,函数的返回值为数字的整数。

注:使用するか、またはswitch文、CHR決意値であれば、直接結果を返します。

コール:

printf("'0' is %d\n",ctoi('0'));    // 输出结果是'0' is 0
printf("'9' is %d\n",ctoi('9'));    // 输出结果是'9' is 9

以下の役職は完了していない場合は、あまりにも行った後、スキルアップグレードを絡まされていない、困難です。

9)カスタム関数、関数名は、知識POW、既に学習したの使用、次のようにn乗、関数宣言の数を見つけることです。

// 求x的y次幂,函数返回值为x的y次幂。
long  POW(const int x,const int y);

コール:

printf("POW(2,3) is %lu\n",POW(2,3));      // 输出结果是8
printf("POW(10,3) is %lu\n",POW(10,5));    // 输出结果是100000

10)サンプルプログラムの作成は、すべて一緒に文字列内の数は、例えば、文字列が「90576483975423」であり、結果は、72すべて一緒です。

11)書き換え整数ATOIと次のように、その機能を達成するために、関数宣言のライブラリ関数をアトル。

int   ATOI(const char *nptr);  	// 把字符串nptr转换为int整数
long ATOL(const char *nptr);     // 把字符串nptr转换为long整数

ヒント:例えば、オープン文字列 "12305"、整数に12305は、2000 + 300 + 10 000 + 0 + 5、即ち、104 + 1 * 2 * 3 * 103 + 102 + 0 + 5 * 101 * 100であります

12)五〇から二は、配列に格納された乱数を生成する、1-52の範囲は、繰り返されるべきではない、最終的に画面に表示されます。

13)ポーカーライセンス手続きの準備、王に加えて、カードのデッキのサイズは、4人に分配次いで52枚のランダムにシャッフルカード、、およびがあります。

ヒント:

(1)カードデッキ表面、1-52すべての数値は、アレイが良い選択であることを特徴とすることができます。

(2)は1-52の間の乱数の範囲は繰り返さないシャッフリングを生成することです。

(3)は、4つの4つの代表の配列を定義し、洗浄シーケンス番号52は、リスト上の4つのアレイに割り当てられています。あなたは、2次元配列が必要とされると、4の配列を定義したくない場合。

(4)4つのアレイの値が表示され、その誰もサイン面です。

九、著作権表示

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

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

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

おすすめ

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