【C言語】データ型 データ型変換定変数演算子と式(知識まとめ)

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)" と同等です。

おすすめ

転載: blog.csdn.net/m0_74102736/article/details/129890527
おすすめ