十一、运算符

运算符在C语言中我们主要有三种:算术运算符、关系运算符、逻辑运算符,下面一一学习:

1.算术运算符:+、-、*、/、%、++、--,下面让我们直接进入练习;

 从上图中可以看出,c,d变量中所得到的值为和;注意,printf在显示浮点型常数的使用%f;

 2.关系运算符:>、>=、<、<=、==、!=;

 int  a=5, b=6;
 a>(b-1)        结果值为0 
 (a +1)== b  结果值为1
 a>=(b-2)      结果值为1
 a<100          结果值为1
 (a+3)<=b    结果值为0
 a != (b-1)     结果值为0

 3.逻辑运算符:&&、||、!;

 逻辑与&&运算符有短路特性,逢0截止;

 逻辑或||运算符逢1截止

 int  x=5, y=18;
 (x>=5) && (y<20)         结果值为1
 ((x+1)>=0) && (y<17)       结果值为0
 ((x-8)>=0) && (y==18)       结果值为0
 ((x-5)>0)  && (y!=18)     结果值为0
 ((x>=5))   ||  (y<20)         结果值为1
 ((x+1)>=0) ||  (y<17)        结果值为1
 ((x-8)>=0) ||  (y==18)       结果值为1
 ((x-5)>0)  ||  (y!=8)                结果值为1

 4.位运算符:~、&、|、^、>>、<<
 下面看下取反~例子:
 char x = 0x17;
y = ~x;
结果如下:
 
 下面让我们观察下按位与
 unsigned char x=0126, y=0xac, z;
 z = x & y;
 
 举例说明按位或:unsigned char x=076, y=0x89, z;
 z = x | y;
 
 举例说明按位异或:相同为假,相异为真;
 unsigned char x=75, y=0173, z;
 z = x ^ y ;
 
 
 位运算的功能可提高运算的效率,可处理硬件寄存器的速度;
让我们观察下0x01进行左移运算:
unsigned char x = 0x01;
X << 1 00000001 << 1 -> 00000010 结果从1变为2;
X << 1 00000010 << 1 -> 00000100 结果从2变为4;
X << 1  00000100 << 1  ->  00001000    结果从4变为8;
 从以上例子可以看出,左移1位相当于将原来的数*2,右移则是除以2;

 
 
 


C++ 中的运算符优先级定义了表达式中运算符的计算顺序。当一个表达式包含多个运算符时,优先级较高的运算符会优先执行[^1]。以下是 C++ 中常见的运算符优先级列表(从高到低排序): ### 三级标题示例 #### 一级:括号与对象选择 - `()`:函数调用 - `[]`:数组下标访问 - `.`:对象成员访问 - `->`:指针成员访问 [^4] #### 二级:单目运算符和后缀操作 - `++`、`--`:后缀自增、自减 - `!`、`~`:逻辑非、位取反 - `+`、`-`:一元正负号 - `*`:解引用 - `&`:取址 - `sizeof`:获取类型或对象大小 [^2] #### 三级:算术运算符 - `*`、`/`、`%`:乘法、除法、取模 - `+`、`-`:加法、减法 [^2] #### 四级:移位运算符 - `<<`、`>>`:左移、右移 [^2] #### 五级:比较运算符 - `<`、`<=`、`>`、`>=`:小于、小于等于、大于、大于等于 [^2] #### 六级:相等性比较 - `==`、`!=`:等于、不等于 [^2] #### 七级:按位与、异或、或 - `&`:按位与 - `^`:按位异或 - `|`:按位或 #### 八级:逻辑与、或 - `&&`:逻辑与 - `||`:逻辑或 [^2] #### 九级:条件运算符 - `?:`:三目条件运算符 #### 十级:赋值运算符 - `=`:简单赋值 - `+=`、`-=`、`*=`、`/=`、`%=`:复合赋值运算符 #### 十一级:逗号运算符 - `,`:逗号运算符 [^2] ### 结合律 在相同优先级的情况下,运算符的结合律决定了它们的计算顺序: - **从左到右**(L-R):大多数运算符采用这种结合方式,例如算术运算符和比较运算符。 - **从右到左**(R-L):某些运算符如赋值运算符 (`=`) 和逻辑非 (`!`) 使用这种结合方式 [^3]。 ### 示例代码 以下是一个使用多种运算符的复杂表达式,展示了如何根据优先级和结合律进行解析: ```cpp #include <iostream> int main() { int a = 5, b = 3, c = 2, d = 1; bool result = (a + b * c > d) && (++c == 3); // 按照优先级和结合律解析 std::cout << "Result: " << std::boolalpha << result << std::endl; std::cout << "Value of c: " << c << std::endl; return 0; } ``` 在这个例子中: - 首先执行 `b * c`(由于乘法运算符优先级高于加法) - 然后执行 `a + (b * c)` 和 `d` - 接着比较 `(a + b * c) > d` - 同时执行 `++c`(前缀自增,优先级较高) - 最后执行逻辑与 (`&&`) 运算 [^2] ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值