1. データの種類
1. データ型変換
(1) 自動型変換
異なる型のデータを一緒に操作する場合、コンパイル システムは自動的に型変換を実行します。自動変換のルールは次のとおりです。
操作の正確性を確保するために、占有メモリ領域が少ない(低レベル) 型をより多くの領域を占有する (高レベル) 型に変換します。
図に示すように:
- 図中の水平矢印は特定の変換を表しています。たとえば、char 型および short 型のデータは最初に int 型に変換する必要があります。Float 型のデータは、演算精度を向上させるために最初に double 型に変換されます (float 型が 2 つある場合でも)。データは追加されます)、double 型に変換してから追加する必要もあります)
- 図中の縦矢印は、横変換後も演算に使用するデータ型が異なる場合の変換方法を示しています。異なるデータ型の変換プロセスでは、型変換シーケンスは矢印の方向への段階的な変換ではなく、中間の型変換は必要ありません。たとえば、int 型と double 型のデータを演算するには、int 型のデータを直接 double 型に変換し、その後、同じ型の 2 つのデータ (double 型) を演算します。
- 変換は式の演算結果の型にのみ影響し、元の変数の定義型は変更されず、そのデータ値も一切変更されません。
- 代入演算子の両側のオペランドの型が異なる場合、型変換も行われます。変換規則は、代入演算子の右側の式の型を左側の変数の型に変換します。
(2) 強制型変換
(型指定子) (式)
-
機能: 式の結果を型指定子で指定された型に強制します。
例:#include<stdio.h> int main() { int a=3,b=4; float c; c=(float)(a+b)/2;//将int型 7 强制转换为float型 7.0 printf("c=%f\n",c); return 0; }
2. 定数
1. 直接定数
(1) 整数定数
つまり、正の整数、負の整数、ゼロを含む整数です。
a. 10進数表現
- 正負の符号と数字 0 ~ 9 (例: -123) で構成されます。
b. 8 進数表現
- 数字の0(プレフィックス)と0~7の数字で構成されます(例:045)
- 通常は符号なし整数
c. 16 進数表現:
- プレフィックス0xまたは0Xと、0 ~ 9 の数字または文字 A ~ F (10 ~ 15 を表し、大文字と小文字の両方) で構成されます (例: 0x12cD)。
- 通常は符号なし整数
(2) 実定数
- つまり、浮動小数点数とも呼ばれる実数は、 C 言語では10 進数でのみ表現できます。
- 実定数のデフォルトは double 型の実数ですが、数値の後に f または F (1.23f など) を追加すると、float 型の実数とみなされます。
a. 10進数で表現
- これは、整数部、小数点、および小数部で構成されます (例-12.34)。
- 整数部または小数部が0の場合は省略できますが、小数点は省略できず、小数点の前後少なくとも片側に数字が必要です。例12.と-.123
b. 指数形式で表現
-
仮数部、文字eまたはE、および指数部で構成されます。形式は次のとおりです: ±仮数 E (e) 指数 (例: -1.2E-2、これは -1.2 x (10) -2 ; 1.2e2を意味します) 、これは 1.2 x (10) 2を意味します。
-
文字 E (または e) の前後には数字が必要であり、指数部分は整数のみにすることができます
(3) 文字定数
「A」などの一重引用符で囲まれた単一の文字
- ASCII 文字セット内の任意の文字を使用できます (つまり、整数などの演算に参加できます)。
- 各文字はメモリ内で 1 バイトを占有します
- エスケープ文字はメモリ内で 1 バイトのみを占有します。
(4) 文字列定数
二重引用符で囲まれた 0 個以上の文字のシーケンス (例: "He MengYuan")
- 文字列には、漢字などのテキスト文字だけでなく、スペース文字、エスケープ文字、ヌル文字などの文字も使用できます。
- 文字列定数はメモリ内の連続ストレージユニットを占有します
- システムは各文字列の後に終了マーク「 \0 」を自動的に追加するため、n 文字の文字列はn+1バイトのスペースを占めることになります。
- sizeof 演算子 (4 を参照) を使用して、文字列が占めるメモリ領域を計算できます。
- strlen() 関数を使用して文字列の長さを計算できます。
2. 記号定数
C 言語では、記号定数と呼ばれる定数を表すために識別子を使用できます。記号定数は使用前に定義する必要があります。一般的な形式は次のとおりです。
#define 标识符 常量值 //#define 宏定义命令
例如:#define PI 3.14
//在需要3.14时使用PI就可以
3. 変数
1. 文字変数
char c1,c2;
- 数値的な特性を持ち、整数と同様の演算に参加できます。
- 文字値を整数変数に代入することができ、整数値を文字変数に代入することもできます。
- 文字変数を整数として出力することも、整数を文字として出力することもできます。
2. 実数型変数
キーワード | タイプ | 占有バイト数 | 範囲 |
---|---|---|---|
浮く | 単精度型 | 4 | 3.4E-38~3.4E+38 |
ダブル | ダブルタイプ | 8 | 1.7E-308~1.7E+308 |
- 単精度データは有効数字7桁を保持でき、それ以降のデータは無効になります。
- 倍精度データは有効数字16桁を保持できますが、VS では小数点以下 6 桁まで保持でき、小数点以下 7 桁は四捨五入する必要があります。
例えば:
#include<stdio.h>
int main()
{
float a = 1234.567689456;
double b = 1234.567895678;
printf("a=%f,b=%f\n", a, b);
return 0;
}
結果は次のとおりです。
a=1234.567749,b=1234.567896
3. 整数変数
キーワード | タイプ | 占有バイト数 | 範囲 |
---|---|---|---|
短い整数 | 短い | 2 | -32768~32767(-2 15~2 15 -1) |
整数 | 整数 | 4 | -2147483648~2147483647(-2 31 ~2 31 -1) |
長い整数 | 長整数 | 4 | -2147483648~2147483647(-2 31 ~2 31 -1) |
符号なしショート | 符号なしショート | 2 | 0~65535(0~2 16 -1) |
符号なし整数 | 符号なし整数 | 4 | 0~4294967295(0~2 32 -1) |
符号なしロング | 符号なし長整数 | 4 | 0~4294967295(0~2 32 -1) |
注: 上記のデータは Visual C++2010 環境のみであり、各種データが占有するメモリ サイズはコンパイル システムによって異なります。
4. 演算子と式
1. 代入演算子と代入式
(1) 単純な代入演算子
等号=
int a,b,c=1;
//等价于
int a=1,b=1,c=1;
//但千万不能像下面这样写
int a=b=c=1;
(2) 複合代入演算子
オペレーター | 応用例 | 同等の形式 |
---|---|---|
+= | a+=x | a=a+(x) |
-= | a-=x | a=a-(x) |
*= | a*=x | a=a*(x) |
/= | a/=x | a=a/(x) |
%= | a%=x | a=a%(x) |
(3) 代入式
変数 = 式
-
「=」の左側と右側の型が異なる場合、代入型変換の原則に従って右側の型を左側の型に変換します。
例えば:#include<stdio.h> int main() { int a; float b=123.456; a = b; printf("%d\n", a); return 0; }
結果は次のとおりです。
123
2. 算術演算子と算術式
(1) 基本的な算術演算子
オペレーター | + | - | * | / | % |
---|---|---|---|---|---|
名前 | 追加 | 減らす | 取る | 取り除く | 残りを取る |
-
/ 除算演算子: a/b を計算するとき、a と b が両方とも整数型の場合、それらの商も整数型になり、小数部分は破棄されます (例: 1/2=0; a または b のいずれかが実数の場合) type の場合、 a と b の両方がdouble 型に変換されてから除算され、結果はdouble型になります。たとえば、1.0/2=0.5 の場合は、
次のコードを参照してください。#include<stdio.h> int main() { float a; a = 1 / 2*3;//计算3的一半 printf("%f\n", a); return 0; }
理想的な結果は次のようになります。
1.500000
ただし、次の場合:
0.000000
正しいコードは次のようになります。
#include<stdio.h> int main() { float a; a = 1.0 / 2*3;//计算3的一半 printf("%f\n", a); return 0; }
-
% 剰余演算子: 結果は 2 つの数値を除算した後の剰余です。演算に含まれる 2 つのオペランドは整数である必要があり、結果も整数になります。例 7%2=1;剰余演算の符号result最初のオペランドと同じ符号(例 7%-2=1)
(2) 自動インクリメント演算子と自動デクリメント演算子
-
自動インクリメント演算子: 変数の値に 1 を加算します (以下の例として i を使用します)
i++: 最初にそれを使用してから 1 を加算します
++i: 最初に 1 を加算してから使用します
違い:#include<stdio.h> int main() { int i=1; printf("i=%d\n",++i);//打印i的值 printf("i=%d\n",i++);//打印i的值 return 0; }
操作結果:
i=2 i=2
-
自動デクリメント演算子: 変数の値を 1 つ減らす
i- -: 最初にそれを使用してから 1 を減算します
- -i: 最初に 1 を加算してから
それを使用します 違い: 自動インクリメントと同様
(3) 算術式
算術演算子、オペランド、括弧で接続された式。オペランドには定数、変数、関数などを使用できます。
- 式が評価されると、特定の値と型が取得されます。型は、使用される特定の演算子とオペランドによって決まります。たとえば、「char a=0;int b=1;float c=2」という定義があります。 ;double d= 3;" の場合、式 "a+b+c+d" の値は double 型になります。
- 乗算記号は省略できません
- 複数のレベルの括弧が使用可能で、括弧のみを使用できます。
3. カンマ演算子とカンマ式
(1) カンマ演算子
カンマも演算子であり、その機能は複数の式を接続して 1 つの式、つまりカンマ式を形成することです。
(2) カンマ式
式 1、式 2、…、式 n
-
実行順序: 各式の値を左から右に順番に計算し、最後の式の値をカンマ式全体の値として使用します。
-
カンマが出現するすべての場所がカンマ式であるわけではなく、カンマは変数の区切り文字としてのみ使用される場合もあります。
コード例:#include<stdio.h> int main() { int i,j=7; float k = 5; i = (j = j + 2, j / k); printf("i=%d\n",i); return 0; }
操作結果:
i=1
4. バイト数演算子を見つける
sizeof(式) または sizeof 式
sizeof(データ型名)
コード例:
#include<stdio.h>
int main()
{
int a, b;
a = sizeof(3 + 5.0);
b = sizeof 3 + 5.0;
printf("%d,%d,%d\n", a, b, sizeof("china"));
return 0;
}
実行結果は次のとおりです。
8,9,6
VS2022では:
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char));//1
printf("%d\n", sizeof(float));//4
printf("%d\n", sizeof(double));//8
printf("%d\n", sizeof(short int));//2
printf("%d\n", sizeof(int));//4
printf("%d\n", sizeof(long int));//4
printf("%d\n", sizeof(unsigned short));//2
printf("%d\n", sizeof(unsigned int));//4
printf("%d\n", sizeof(unsigned long));//4
return 0;
}
5. 関係演算子と関係式
(1) 関係演算子
オペレーター | 意味 |
---|---|
> | 以上 |
>= | 以上 |
< | 未満 |
<= | 以下 |
== | 等しい |
!= | 等しくない |
(2) 関係式
式 1 関係演算子 式 2
- 「=」は代入を表す代入演算子、「==」は判定を表す関係演算子です。
- 0 以外は true、0 は false、false は 0、true は 1 の場合があります。例: 関係式「(a=3)>(b=8)」の値は 0 です。
- 実数の等しいかどうかを判断すると、正しい結果が得られない場合があります(例:「1.0/3*3.0==1.0」の結果は 0)。
6. 論理演算子と論理式
(1) 論理演算子
オペレーター | ! | && | || | |
---|---|---|---|---|
名前 | 論理否定 | 論理積 | 論理的または |
(2) 論理式
式 1 論理演算子 式 2
または論理演算子 式 1
- 複数の部分式で構成される論理式では、左から右に計算が行われます。部分式の値を計算して論理式全体の値を決定する場合、右側の残りの部分式は計算されません。この式の値が計算され、この状況を「ショート」と呼びます。
- && の周りの式の 1 つが false の場合、結果は false になります。
- || 左式と右式のいずれかが true の場合、結果は true になります。
7. 条件演算子と条件式
(1) 条件演算子
2 つの記号「?」と「:」で構成されます。
(2) 条件式
式1? 式2: 式3
- 実行順序: 最初に式 1 の値を計算します。値が 0 以外で式の条件が true の場合は、式 2 の値が条件式全体の値として使用されます。それ以外の場合は、式 3 の値が使用されます。条件式全体として使用されます。たとえば、4>3?5:7 の値は 5 です。
- 条件式の式 1 と式 2 および式 3 の種類が異なっていてもよく、式 2 と式 3 の種類も異なる場合がありますが、その場合はシステムが自動的に変換し、結果は式 2 となります。中位型の上位であり、条件式の型として使用されます。たとえば、「'a'?1:2.0」の結果は double 型 1.0 になります。
- 順次ネスト: "a>3?b:c>2?1:0"、条件式の右結合性に従って、これは "a>3?b:(c>2?1:0)" と同等です。