免責事項:この記事はブロガーであるジョー・ホワイト-元労働許可証のうち、それらをノックするための単一の単語は、ブロガーなく複製してはならない、あなたのサポートをありがとう。
ブログのこのシリーズは、商業目的のために使用されていない共有する経験の交換のみを行います。この記事の不備は、メッセージを残してください場合は、それは時間に変更されます。
C言語 - 王座戦(オペレータ)
オペレータ:C言語は、そこに存在します。彼らはどのようにデータ操作を決定しますが、算術記号のボスは誰ですか?
王位についての戦いの前に、最初のいくつかの王子の存在を教えて
オペレータは、シンボルが、特定の数学や論理演算を実行するようコンパイラーに指示しています。C言語では、事業者の富を構築し、次のタイプの演算子を提供します。
- 算術演算子
- 関係演算子
- 論理演算子
- ビット演算子
- 代入演算子
- その他の演算子
このポストは、オペレータのために、上記の各実施例を記載します。
算術演算子
次の表は、次いで変数A = 10、変数B = 20、と仮定し、算術演算子について説明します。
演算子 | 説明 | 例 |
---|---|---|
+ | 2つのオペランドが追加されます | A + B 30の数が得られます |
- | 第二オペランドを有する第1オペランドを差し引きます | - -10番号Bが得られます |
* | 2つのオペランドを掛けます | *のB番号300が得られます。 |
/ | 第二オペランドと第二オペランドで | B / Aの数が2を得ています |
% | モジュロ演算子、分割後の余り | Bの%番号0が得られます。 |
++ | インクリメント演算子は、整数値が1だけインクリメントされ | 得られた数は11であり、++ |
- - | デクリメント演算、整数減算 | 得られた数は9でありますA-- |
注意:唯一の整数余りと剰余を取ることができます!
次のようにサンプル・コードは次のとおりです。
#include <stdio.h>
int main()
{
int a = 21;
int b = 10;
int c ;
c = a + b;
printf("Line 1 - c 的值是 %d\n", c );
c = a - b;
printf("Line 2 - c 的值是 %d\n", c );
c = a * b;
printf("Line 3 - c 的值是 %d\n", c );
c = a / b;
printf("Line 4 - c 的值是 %d\n", c );
c = a % b;
printf("Line 5 - c 的值是 %d\n", c );
c = a++; // 赋值后再加 1 ,c 为 21,a 为 22
printf("Line 6 - c 的值是 %d\n", c );
c = a--; // 赋值后再减 1 ,c 为 22 ,a 为 21
printf("Line 7 - c 的值是 %d\n", c );
system("pause");
}
結果は以下の通りである:
++と++アールの違いを証明するもの例:
#include <stdio.h>
int main()
{
int c;
int a = 10;
c = a++;
printf("先赋值后运算:\n");
printf("Line 1 - c 的值是 %d\n", c );
printf("Line 2 - a 的值是 %d\n", a );
a = 10;
c = a--;
printf("Line 3 - c 的值是 %d\n", c );
printf("Line 4 - a 的值是 %d\n", a );
printf("先运算后赋值:\n");
a = 10;
c = ++a;
printf("Line 5 - c 的值是 %d\n", c );
printf("Line 6 - a 的值是 %d\n", a );
a = 10;
c = --a;
printf("Line 7 - c 的值是 %d\n", c );
printf("Line 8 - a 的值是 %d\n", a );
}
遅延プログラムの結果:
関係演算子
次の表は、A = 10、Bは、次いで、20 =仮定すると、関係演算子を示します。
演算子 | 説明 | 例 |
---|---|---|
== | 检查两个操作数是否相等,如果相等则条件为真 | (A == B)不为真 |
!= | 检查两个操作数是否不相等,如果不相等则条件为真 | (A != B)为真 |
> | 检查前面的操作数时候大于后面的操作数,如果是则条件为真 | (A > B)不为真 |
< | 检查前面的操作数时候小于后面的操作数,如果是则条件为真 | (A < B)为真 |
>= | 检查前面的操作数时候大于等于后面的操作数,如果是则条件为真 | (A >= B)不为真 |
<= | 检查前面的操作数时候小于后面的操作数,如果是则条件为真 | (A <= B)为真 |
参考例程如下:
#include <stdio.h>
int main()
{
int a = 21;
int b = 10;
int c ;
if( a == b )
{
printf("Line 1 - a 等于 b\n" );
}
else
{
printf("Line 1 - a 不等于 b\n" );
}
if ( a < b )
{
printf("Line 2 - a 小于 b\n" );
}
else
{
printf("Line 2 - a 不小于 b\n" );
}
if ( a > b )
{
printf("Line 3 - a 大于 b\n" );
}
else
{
printf("Line 3 - a 不大于 b\n" );
}
/* 改变 a 和 b 的值 */
a = 5;
b = 20;
if ( a <= b )
{
printf("Line 4 - a 小于或等于 b\n" );
}
if ( b >= a )
{
printf("Line 5 - b 大于或等于 a\n" );
}
}
运行结果如下:
逻辑运算符
下表介绍逻辑运算符,假设变量A为1,变量B为0,则:
运算符 | 描述 | 示例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真 | (A && B) 为假 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 | (A |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假 | !(A && B) 为真 |
测试代码如下:
#include <stdio.h>
int main()
{
int a = 5;
int b = 20;
int c ;
if ( a && b )
{
printf("Line 1 - 条件为真\n" );
}
if ( a || b )
{
printf("Line 2 - 条件为真\n" );
}
/* 改变 a 和 b 的值 */
a = 0;
b = 10;
if ( a && b )
{
printf("Line 3 - 条件为真\n" );
}
else
{
printf("Line 3 - 条件不为真\n" );
}
if ( !(a && b) )
{
printf("Line 4 - 条件为真\n" );
}
}
运行结果如下:
位运算符
下表介绍了位运算符的使用方法。
p | q | p&q | p|q | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
假设 A = 60 ,B = 13 ,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
补充:
假设A = 60,则:
运算符 | 描述 | 示例 |
---|---|---|
<< | 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0) | A << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃 | A >> 2 将得到 15,即为 0000 1111 |
代码示例:
#include <stdio.h>
int main()
{
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
printf("Line 1 - c 的值是 %d\n", c );
c = a | b; /* 61 = 0011 1101 */
printf("Line 2 - c 的值是 %d\n", c );
c = a ^ b; /* 49 = 0011 0001 */
printf("Line 3 - c 的值是 %d\n", c );
c = ~a; /*-61 = 1100 0011 */
printf("Line 4 - c 的值是 %d\n", c );
c = a << 2; /* 240 = 1111 0000 */
printf("Line 5 - c 的值是 %d\n", c );
c = a >> 2; /* 15 = 0000 1111 */
printf("Line 6 - c 的值是 %d\n", c );
}
赋值运算符
下表列出了 C 语言支持的赋值运算符:
运算符 | 描述 | 示例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
<<= | 左移且赋值运算符 | C <<= 2 等同于 C = C << 2 |
>>= | 右移且赋值运算符 | C >>= 2 等同于 C = C >> 2 |
&= | 按位与且赋值运算符 | C &= 2 等同于 C = C & 2 |
^= | 按位异或且赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= | 按位或且赋值运算符 | C|= 2 等同于 C = C | 2 |
代码示例如下:
#include <stdio.h>
main()
{
int a = 21;
int c ;
c = a;
printf("Line 1 - = 运算符实例,c 的值 = %d\n", c );
c += a;
printf("Line 2 - += 运算符实例,c 的值 = %d\n", c );
c -= a;
printf("Line 3 - -= 运算符实例,c 的值 = %d\n", c );
c *= a;
printf("Line 4 - *= 运算符实例,c 的值 = %d\n", c );
c /= a;
printf("Line 5 - /= 运算符实例,c 的值 = %d\n", c );
c = 200;
c %= a;
printf("Line 6 - %= 运算符实例,c 的值 = %d\n", c );
c <<= 2;
printf("Line 7 - <<= 运算符实例,c 的值 = %d\n", c );
c >>= 2;
printf("Line 8 - >>= 运算符实例,c 的值 = %d\n", c );
c &= 2;
printf("Line 9 - &= 运算符实例,c 的值 = %d\n", c );
c ^= 2;
printf("Line 10 - ^= 运算符实例,c 的值 = %d\n", c );
c |= 2;
printf("Line 11 - |= 运算符实例,c 的值 = %d\n", c );
}
演示结果如下:
杂项运算符
下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof 和 ? : 。
运算符 | 描述 | 示例 |
---|---|---|
sizeof( ) | 返回变量的大小 (字节) | sizeof(a) 将返回 4,其中 a 是整数 |
& | 返回变量的地址 | &a; 将给出变量的实际地址 |
* | 指向一个变量 | *a; 将指向一个变量 |
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
测试代码如下:
#include <stdio.h>
int main()
{
int a = 4;
short b;
double c;
int* ptr;
/* sizeof 运算符实例 */
printf("Line 1 - 变量 a 的大小 = %lu\n", sizeof(a) );
printf("Line 2 - 变量 b 的大小 = %lu\n", sizeof(b) );
printf("Line 3 - 变量 c 的大小 = %lu\n", sizeof(c) );
/* & 和 * 运算符实例 */
ptr = &a; /* 'ptr' 现在包含 'a' 的地址 */
printf("a 的值是 %d\n", a);
printf("*ptr 是 %d\n", *ptr);
/* 三元运算符实例 */
a = 10;
b = (a == 1) ? 20: 30;
printf( "b 的值是 %d\n", b );
b = (a == 10) ? 20: 30;
printf( "b 的值是 %d\n", b );
}
运行结果如下:
C中的运算符优先级
上面介绍了这么多的运算符,当一个表达式中存在几个运算符时,谁才是运算符中的老大?下面将介绍运算符的优先级问题。
次の表は、次の優先度の低いオペレータがテーブルに表示さを有する、上記の表に表示され、より高い優先順位の演算子を備え、オペレータの優先順位を各オペレータ降順に表示されます。発現において、より高い優先度を優先オペレータが算出されます。
カテゴリ | 演算子 | 合成 |
---|---|---|
サフィックス | ()[] - >。++ - - | 左から右へ |
一元 | + - !〜++ - - (タイプ)*&はsizeof | 右から左へ |
乗除 | * /% | 左から右へ |
加減 | + - | 左から右へ |
置換 | << >> | 左から右へ |
関係 | <<=>> = | 左から右へ |
等しいです | ==!= | 左から右へ |
ビットとのAND | & | 左から右へ |
ビットXOR XOR | ^ | 左から右へ |
ビットまたはOR | | | 左から右へ |
論理AND AND | && | 左から右へ |
論理和または | || | 左から右へ |
条件 | ?: | 右から左へ |
割り当て | = + = - = * = / =%= >> = << =&= ^ = | = |
コンマ | 、 | 左から右へ |
次のようにサンプル・コードは次のとおりです。
#include <stdio.h>
main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d; // ( 30 * 15 ) / 5
printf("(a + b) * c / d 的值是 %d\n", e );
e = ((a + b) * c) / d; // (30 * 15 ) / 5
printf("((a + b) * c) / d 的值是 %d\n" , e );
e = (a + b) * (c / d); // (30) * (15/5)
printf("(a + b) * (c / d) 的值是 %d\n", e );
e = a + (b * c) / d; // 20 + (150/5)
printf("a + (b * c) / d 的值是 %d\n" , e );
return 0;
}
私たちはコードを書くとき、私たちは自分自身の書き込みでその適切な論理式を確認する必要があります。