1. 初识操作符
C语言具有更多地强调表达式而不是语句的特点。
表达式是表示如何计算值的公式。最简单的表达式是变量和常量,而更复杂的表达式则将操作符(或称运算符)用于操作数(操作数自身也是表达式)。
比如:a+(b+c)
。
操作符是构建表达式的基本工具,C语言提供的运算符在其他的许多编程语言中都能找到对应的类似操作符。
操作符的定义是:指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。
操作符具有以下分类:
1. 算术操作符
+
:一元正号运算符(很少用) 或加法运算符-
:一元负号运算符,或减法运算符*
:乘法运算符/
:除法运算符%
:取模运算符
在C语言中没有平时做数学题时的乘号×
和除号÷
,取而代之的是*
和/
,但效果是基本一样的。
而日常生活中比较少见的%
的作用是取模(取余),简单而言就是获取被除数除以除数之后剩下的余数,如7 % 2 = 1
。它要求操作数都是整数,如果其中一个操作数不是整数,那么程序将无法编译通过。
值得注意的是,当除号两端都是整数时,即使定义的变量是浮点数,得出的结果也会是整数(或被截取为整数),除非其中一方带有小数。
示例:
int a = 9 / 2;
printf("%d\n", a); //4
float b = 9 / 2;
printf("%d\n", b); //4.000000
float c = 9 / 2.0;
printf("%d\n", c); // 4.500000
2. 移位操作符
>>
:右移操作符<<
:左移操作符
移位操作符移动的是二进制位。
示例:
int a = 2;
int b = a << 1;
printf("%d\n", b); //4
在这段代码中,a是整型类型,在存储空间中占有4个子节,即32个比特位。
因此在底层中,a的表现形式其实是 00000000000000000000000000000010
。
如果经过一次左移,则变成了 00000000000000000000000000000100
,也就是十进制的4。
移位操作符后续会进一步讲解。
3. 位操作符
&
:按位与|
:按位或^
:按位异或
这三个位操作符也是从二进制层面操作数据的,先打个招呼,后续会详细讲解。
4. 赋值操作符
=
:等于(这里的等于是赋值的意思)+=
:加等于-=
:减等于*=
:乘等于/=
:除等于&=
:按位与等于|=
:按位或等于^=
:按位异或等于>>=
:右移等于<<=
:左移等于
第一个已经讲过,而后面的多个赋值操作符其实原理是相同的,举个例子:
int i = 0;
i += 1;
printf("