第5章 表达式(1)

本文深入解析C++中的运算符,包括一元、二元和三元操作符的具体应用。讨论了算术、关系、逻辑和位操作符的功能与使用技巧,强调了赋值操作符的特点与注意事项,并介绍了bitset的高效使用及移位操作符在I/O中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++提供了一元操作符(unary operator)和二元操作符(binary operator)两种操作符,C++还提供了一个使用三个操作数的三元操作符(ternary operator)。

5.1 算术操作符

一元操作符具有直观的含义,它对其操作数取负。

操作溢出时,其结果值"截断",将符号位的值由0设为1,于是结果变为负数。

	int i = 100;
	cout << -i << endl;

5.2 关系操作符和逻辑操作符

对于逻辑与操作符,一个很有价值的用法是:如果某边界条件使expr2的计算变得危险,则应在该条件出现之前,先让expr1的计算结果变为false。

	string str1("AndersFan");
	string::iterator i = str1.begin();

	while(i!=str1.end() && !isspace(*i))
	{
		cout << *i;
		i++;
	}
	cout << endl;
不应该串联使用关系操作符。

bool值false用0表示,而true则为1。

5.3 位操作符

移位操作的右操作数不可以是负数,而且必须是严格小于左操作数位数的值。

位异或操作符(^)也需要两个整型操作数。在每个位的位置,如果两个操作数对应的位只有一个为1,则操作结果中该位为1,否则为0.

5.3.1 bitset对象或整型值的使用

一般而言,标准库提供的bitset操作更直接、更容易阅读和书写、正确使用的可能性更高。而且,bitset对象的大小不受unsigned数的位数限制。通常说,bitset优于整型结构的低级直接位操作。

	bitset<30> bit;
	bit |= true << 27; 
	cout << bit << endl;
5.3.2 将移位操作符用于IO

像其他二元操作符一样,移位操作符也是左结合的。这类操作符从左向右地结合。

移位操作符具有中等优先级:其优先级比算术操作符低,但比关系操作符、赋值操作符和条件操作符优先级高。

5.4 赋值操作符

5.4.1 赋值操作的右结合性

C++语言允许将这多个赋值操作写在一个表达式中。

	int i, j, k;
	i = j = k = 1000;
与其他二元操作符不同,赋值操作具有右结合特性。

5.4.2 赋值操作具有低优先级

谨防混淆相等操作符和赋值操作符。

5.4.3 复合赋值操作符

+= -+ *= etc...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值