Menu Close

C语言的运算符 :算术运算符, 赋值运算符,和sizeof 运算符

C 语言支持一组丰富的内置运算符。运算符(Opertors) 是一个符号,它告诉编译器根据提供给运算符的值执行某些数学,条件或逻辑运算。

操作数(operand)是任何运算符都可以使用的值。例如,当我们说 4+5 时,这里的数字 4 和 5 是操作数,而 + 是运算符。

不同的运算符使用不同数量的操作数,例如 + 运算符需要两个操作数(5+6),称为双目运算符; 自增符号“++” 只需要一个操作数(a++), 称为单目运算符;而需要三个操作数的运算符,称为三目运算符,例如条件运算符(?:)。

1.C语言运算符种类

C语言有六种运算符,如下:

1)算术运算符;

2)赋值运算符;

3)关系运算符;

4)逻辑运算符;

5)位运算符;

6)条件运算符(?:);

6) 杂项运算符。

下面的表格列出了 C 语言支持的所有杂项运算符:

运算符

解释

例子

sizeof()

返回变量的字节大小

sizeof(int)将返回4

&

返回变量的地址

&a; 将给出变量的实际地址

*

指向一个变量

*a; 将指向一个变量

.

操作结构联盟里面的成员

mem.age

->

操作结构联盟里面的指针成员

mem->age

[]

数组元素的下标

arr[0]

本章将只介绍算术运算符、赋值运算符和sizeof运算符,关系运算符,逻辑运算符, 位运算符,和杂项运算符放在其它章节中介绍。

2.算术运算符

下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 18,变量 B 的值为 5,则:

运算符 描述 实例
+ 两个数相加 A+B 将得到 23
一个数减另一个数 A-B 将得到 13
* 两个数相乘 A*B 将得到 90
/ 分子除以分母 A/B 将得到 3.6
% 余数运算符,整除后的余数 B%A 将得到 3
++ 自增运算符,整数值增加 1 A++ 将得到 19
自减运算符,整数值减少 1 A– 将得到 17

例1. 算术运算符的应用

#include <stdio.h>

int main()
{
   int A=18; // 定义变量A,赋值18
   int B=5; // 定义变量B,赋值5

   printf("A=%d\n", A);
   printf("B=%d\n",B);
   printf("A+B=%d\n",A+B);
   printf("A-B=%d\n",A-B);
   printf("A*B=%d\n",A*B);
   printf("A/B=%d\n",A/B);
   int C = A % B ;
   printf("A Remainder B=%d\n",C); 

   A++; // 自增1 
   printf("A++=%d\n",A); 
   B--; // 自减1 
   printf("B--=%d\n",B); 
   return 0; 
}

结果:

A=18
B=5
A+B=23
A-B=13
A*B=90
A/B=3
A Reminder B=3
A++=19
B--=4

Process returned 0 (0x0) execution time : 0.039 s
Press any key to continue.

变量的自增或自减有两种写法:

变量名++;    // 表示在本次使用变量后再自增;

++变量名;     // 表示在本次使用变量前自增;

变量名–;    // 表示在本次使用变量后再自减;

变量名;     // 表示在本次使用变量前自减;

例2. 自增自减运算符的应用

#include <stdio.h>

int main()
{
int ii; // 定义变量ii并初始化

ii=10;
printf("ii=%d\n",ii);
printf("ii++=%d\n",ii++); // 在使用后自增
printf("ii=%d\n\n",ii);

ii=10;
printf("ii=%d\n",ii);
printf("++ii=%d\n",++ii); // 在使用前自增
printf("ii=%d\n\n",ii);

ii=10;
printf("ii=%d\n",ii);
printf("--ii=%d\n",--ii); // 在使用前自减
printf("ii=%d\n\n",ii);

ii=10;
printf("ii=%d\n",ii);
printf("ii--=%d\n",--ii); // 在使用前自减
printf("ii=%d\n\n",ii);

return 0;
}

结果:

ii=10
ii++=10
ii=11

ii=10
++ii=11
ii=11

ii=10
--ii=9
ii=9

ii=10
ii--=9
ii=9


Process returned 0 (0x0) execution time : 0.957 s
Press any key to continue.

3. 赋值运算符

下表列出了 C 语言支持的赋值运算符:A的值是5,B的值是6,C的值是9

运算符 描述 实例
= 简单的赋值运算符,把右边操作数的值赋给左边操作数 D = A + B 将把 A + B 的值赋给 D   D=11
+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A; C=14
-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C – A;C=4
*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A; C=45
/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A; C=1
%= 求余数且赋值运算符,求两个操作数的模赋值给左边操作数,浮点数不适用取余数。 C %= A 相当于 C = C % A; C=4

赋值运算符支持的是C语言的基本数据类型,包括char、int和double,字符串(字符数组)不能使用赋值运算符。

例3. 赋值运算符

#include <stdio.h>

int main()
{
   int C=0; // 定义变量C并初始化
   int A=21; // 定义变量A并初始化

   printf("C=0; A=21\n");
   C=A;
   printf("C=A; C=%d\n",C);

   C+=A; // C=C+A;
   printf("C+=A,C=%d\n",C);

   C-=A; // C=C-A;
   printf("C-=A,C=%d\n",C);

   C*=A; // C=C*A;
   printf("C*=A,C=%d\n",C);

   C/=A; // C=C/A;
   printf("C/=A,C=%d\n",C);

   C=200;
   printf("C=200\n");
   C%=A; // C=C%A;
   printf("C%=A,C=%d\n",C);

   return 0;
}

结果

C=0; A=21
C=A; C=21
C+=A,C=42
C-=A,C=21
C*=A,C=441
C/=A,C=21
C=200
C=A,C=11

Process returned 0 (0x0) execution time : 1.185 s
Press any key to continue.

4. sizeof 运算符

sizeof是C语言的一种单目操作符,如C语言的其他操作符++、–等,它并不是函数。

READ  负数的二进制表示方法

sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。

操作数的存储大小由操作数的类型决定。

4.1 sizeof 的使用方法

4.1.1 用于数据类型 

sizeof使用形式: sizeof(type)   
数据类型必须用括号括住: sizeof(int)

4.1.2 用于变量 

 

     sizeof使用形式: sizeof(var_name) 或 sizeof var_name 

变量名可以不用括号括住. 如sizeof (var_name),sizeof var_name 等都是正确形式,带括号的用法更普遍,大多数程序员采用这种形式。

注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,

4.1.3 sizeof的结果 (不同的平台上可能不一样)

sizeof(char) = 1;
sizeof(unsigned char) = 1;
sizeof(signed char) = 1;
sizeof(int) = 4;
sizeof(unsigned int) = 4;
sizeof(short int) = 2;
sizeof(unsigned short) = 2;
sizeof(long int) = 4;
sizeof(unsigned long) = 4;
sizeof(float) = 4;
sizeof(double) = 8;
sizeof(long double) = 12;
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

1 Comment

  1. 小刚

    int 型与 float 型混合在一起时,运算结果是 float 型。

    比如,9 + 2.5f 的值为 11.5;6.7f / 2 的值为 3.35。

    运算符 /:当两个操作数都是整型时,结果会向下取整。如,1 / 2 的值是 0,而不是 0.5 。

    运算符 %要求两个操作数都是整型。

    把 0 作为 / 或 % 的右操作数会导致未定义行为。

    当运算符 / 和 % 用于负操作数时,其结果难以确定。

    根据 C89 的标准,如果两个操作数中有一个是负数,那么除法结果既可以向上取整也可以向下取整(例如,-9 / 7 的结果既可以是 -1 也可以是 -2);i % j 的符号与具体实现有关(例如,-9 % 7 可以是 -2 也可以是 5)。

    在 C99 中,除法的结果总是向零取整(因此,-9 / 7 的结果是 -1);i % j 的符号与 i 相同(因此,-9 % 7 的结果是 -2;我特意测试了以下,9 % -7 的值是 2,-9 % -7 的值还是 2)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in C语言教程

Related Posts