算術演算子、代入演算子、および単項演算子の概要

算術演算子

算術演算子には次の記号があります。
1: + (プラス記号)
2: - (マイナス記号)
3: * (乗算記号)
4: / (除算記号)
5: % (剰余記号
) C 言語の演算は重要な役割を果たします。以下に紹介しましょう

1.1: + と -

+ と - の関数は数学で学んだものと同じで、次のコードのように加算と減算を完了するために使用されます。

#include<stdio.h>
int main()
{
    
    
    int a=3+2,b=5-6;
    printf("%d\n",a);
    printf("%d\n",b);
    return 0;
}

ここでの a と b の最終的な印刷結果は、それぞれ 5 と -1 です。

1.2:*

※数学の×と同じ意味で、アルゴリズムも同じです。

#include<stdio.h>
int main()
{
    
    
	int a = 3 + 2, b = 5 - 6;
	int c = a * b;
	printf("%d\n", c);
	return 0;
}

前のコードに簡単な変更を加えると、計算により c の値が -5 になり、最終的な実行結果も -5 になります。

1.3:/

/ は式を割ることです。

#include<stdio.h>
int main()
{
    
    
	float a = 6 / 4;
	int b = 6 / 4;
	printf("%f\n", a); //输出 1.000000
	printf("%d\n", b); //输出 1
	return 0;
}

出力が 1.5 ではないのはなぜですか?
実は除算記号の両端が整数の場合は整数除算が行われ、その結果も整数になるという法則があり、
変数xの型はfloat(浮動小数点数)ですが、その結果は整数になります。 6 / 4 は 1.0 であり、1.5 ではありません。その理由は、C 言語の整数の除算は整数の除算であり、整数部分のみが返され、小数部分は切り捨てられるためです。

小数部の後の数桁を取得したい場合は、オペランドの少なくとも 1 つを浮動小数点数にすることができます。

#include <stdio.h>
int main()
{
    
    
 float x = 6.0 / 4; // 或者写成 6 / 4.0
 printf("%f\n", x); // 输出 1.500000
 return 0;
}

6.0 / 4 は浮動小数点除算を実行することを意味し、結果は 1.5 になります。
別の状況を考えてみましょう

include <stdio.h>
int main()
{
    
    
 int score = 5;
 score = (score / 20) * 100;
 return 0;
}

上記のコードでは、計算後のスコアは 25 になると思われるかもしれませんが、実際のスコアは 0 です。これは、
スコア / 20 は割り切れて整数値 0 になるため、100 を掛けると結果も 0 になるためです。
期待どおりの結果を得るには、整数の除算が浮動小数点数の除算になるように、除数 20 を 20.0 に変更します。

include <stdio.h>
int main()
{
    
    
 int score = 5;
 score = (score / 20.0) * 100;
 return 0;
}

1.4:%

% は数学では剰余演算ですが、C 言語では 2 つの整数を除算した余りを返します。この演算子は整数に対してのみ使用でき、浮動小数点数には使用できません。

#include <stdio.h>
int main()
{
    
    
 int x = 6 % 4; // 2
 return 0;
}

別の状況を見てみましょう。

#include <stdio.h>
int main()
{
    
    
 printf("%d\n", 11 % -5); //结果为 1
 printf("%d\n",-11 % -5); //结果为-1
 printf("%d\n",-11 % 5);  //结果为-1
 return 0;
}

この結果は、通常の数学演算の結果とは異なります。
負の数のモジュロには規則があり、結果の符号は最初のオペランドの符号によって決まります。

代入演算子

変数作成時に初期値を与えることを初期化、変数作成後に値を与えることを代入といいます。

int a = 100;//初始化
a = 200;//赋值,这⾥使⽤的就是赋值操作符

代入演算子 = は、いつでも変数に値を代入できる演算子です。

2.1: 継続的な割り当て

割り当ては連続的に行うことができます。たとえば、次のようになります。

int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的。

このコードも次と同等です

int a = 3;
int b = 5;
int c = 0;
b = a+3;
c = b;

ただし、個人的には 2 番目のコードの方が理解しやすく観察しやすいため、お勧めします。

2.2: 複合代入演算子

コードを記述するとき、次のコードに示すように、数値に対して自己インクリメント演算および自己デクリメント演算を実行することがよくあります。

int a = 10;
a = a+3;
a = a-2;

このコードも次と同等です

int a = 10;
a += 3;
a -= 2;


したがって、これら 2 つのコードから、a=a+3 は a+=3 として記述できることがわかります
。C 言語には、コードを記述するのに便利な複合代入記号が用意されています。これらの代入記号は次のとおりです。

+=  -=
*=  /=  %=
>>=  <<=
&=  |=  ^=

単項演算子

上記の演算子はすべて二項演算子です。C 言語には、単項演算子と呼ばれるオペランドを 1 つだけ持つ演算子もあります。
つまり、++、-、+、-です。

3.1++ および –

++ は自己インクリメント演算子であり、pre-++ と post-++ にも分割されます。 – は自己デクリメント演算子で、pre-– と post-– にも分割されます。

3.1.1: プレフィックス ++ とプレフィックス –

フロント ++ (最初に +1 してから使用):

int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
printf("a=%d b=%d\n",a , b);
1

別の例を見てみましょう。

int a = 10;
a = a+1;
b = a;
printf("a=%d b=%d\n",a , b);

処理としては、a は元々 10 で、最初に +1、次に a が 11 になり、次に b に代入され、b は 11 になります。

先頭に追加 – (最初に -1 を付けてから使用):

int a = 10;
int b = --a;//--的操作数是a,是放在a的前⾯的,就是前置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 9

3.1.2: ++ 後と – 後

戻る ++ (最初に使用し、次に +1 を使用):

int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);

別の例を見てみましょう。

int a = 10;
int b = a;
a = a+1;
printf("a=%d b=%d\n",a , b);

処理としては、a は元々 10 で、それが最初に使用されます。つまり、最初に b に割り当てられ、b は 10 になり、次に +1 され、a は 11 になります。

後置 – (最初に使用し、次に -1 を使用):

int a = 10;
int b = a--;//--的操作数是a,是放在a的后⾯的,就是后置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 1

3.2: + と -

ここで、+ は正の符号、- は負の符号で、どちらも単項演算子です。
演算子 + は正負の値には影響せず、完全に省略できる演算子ですが、記述してもエラーにはなりません。

int a = +10; 等价于 int a = 10;

演算子 - 値の符号を変更するために使用されます。負の数の前に - を追加すると正の数になり、正の数の前に - を追加すると負の数になります。

int a = 10;
int b = -a;
int c = -10;
printf("b=%d c=%d\n", b, c);//这⾥的b和c都是-10
int a = -10;
int b = -a;
printf("b=%d\n", b); //这⾥的b是10

おすすめ

転載: blog.csdn.net/2301_79178723/article/details/131914544