第五章:表达式、语句和运算符

程序是一组按顺序执行的命令,这些命令由表达式和语句组成,使用运算符执行特定的计算和操作。

一、语句

程序由语句组成,如:

cout << "Hello World" << endl;

语句以分号(;)结尾。

二、复合语句或块

复合语句或块:在大括号{…}中将语句组合在一起。

{
	int daysInYear = 365; 
	cout << "Block contains an int and a cout statement" << endl;
}

三、运算符

1、赋值运算符(=)
int daysInYear = 365;
2、L值和R值

前面示例的变量(例如daysInYear)实际上是内存位置的句柄,是一个L值(=号左边)。 R值(=号右边)是存储器位置中的实际内容。
所有L值都可以是R值,但并非所有R值都可以是L值。下面的示例没有任何意义,因此无法编译:

365 = daysInYear;
3、加(+)、减( - )、乘(*)、除(/)和取模(%)运算符

需要注意的是,除法运算符(/)返回两数相除的结果。返回的是完整结果,还是仅保留整数部分,与相除的两个数和结果变量的数据类型有关。如下所示:

#include <iostream>
#include <string>

using namespace std;

int main() 
{
	int a1 = 100, b1 = 33;
	int c1 = 0;
	float d1 = 0;
	c1 = a1 / b1;
	d1 = a1 / b1;
	
	cout << c1 << endl << d1 << endl;

	float a2 = 100, b2 = 33;
	int c2 = 0;
	float d2 = 0;
	c2 = a2 / b2;
	d2 = a2 / b2;

	cout << c2 << endl << d2 << endl;

	return 0;
}

输出结果:
3
3
3
3.0303

模运算符(%)返回除法运算的余数,它仅适用于整数相除的情况,如果相除的两个数不是整数,编译器会报错。

4、递增(++)和递减( – )运算符

这两个运算符每次操作都是变量自身加1或减1。
该操作由以下几种形式:

int num1 = 101; 
int num2 = num1++; // Postfix increment operator 
int num2 = ++num1; // Prefix increment operator 
int num2 = num1--; // Postfix decrement operator 
int num2 = --num1; // Prefix decrement operator

如代码示例所示,使用递增和递减运算符有两种不同的方式:在操作数之前和之后。 放在操作数之前的运算符称为前缀增量(减量)运算符,后面的运算符称为后缀增量(减量)运算符。
执行后缀运算符的结果是首先为l值分配r值,并且在该赋值之后,r值递增(或递减)。这意味着在使用后缀运算符的所有情况下,num2的值是num1的旧值(递增或递减操作之前的值)。
前缀运算符的行为完全相反。首先递增r值,然后将其赋值给l值。在这种情况下,num2和num1携带相同的值。
需要注意的是,前缀运算和后缀运算仅在赋值操作中有区别,在下面这种情况下两条语句是等价的:

startValue++; // Is the same as… 
++startValue;
5、 等价(==) 和不等(!=)运算符

这两个运算符返回的结果是布尔值true 或 false。

6、关系运算符

返回结果也是布尔值。
在这里插入图片描述
输出该布尔值时,false为0,true为1。

7、逻辑操作符 NOT, AND, OR, 和 XOR

非操作(NOT)的符号是!,作用于单个数:
在这里插入图片描述
除了非操作,其它操作符都是作用于两个操作数。
与操作AND的符号是&&:
在这里插入图片描述
或操作OR,操作符为||:
在这里插入图片描述
异或操作,操作符为^:
在这里插入图片描述

8、按位操作符:NOT (~), AND (&), OR (|),和XOR (^)

逻辑运算符和按位运算符之间的区别在于,按位运算符不返回布尔结果。 相反,它们提供了一个结果,通过在操作数的位上执行运算符来控制各个位。
C ++允许您、在按位模式下执行诸如NOT,OR,AND和异或(即XOR)操作之类的操作,可以通过使用〜来取消它们来操作各个位,使用|对它们进行OR运算,并使用&进行AND运算, 并使用^对它们进行异或。
下面代码演示了按位运算符的使用:

#include <iostream>
#include <bitset>

using namespace std;

int main() 
{
	cout << "Enter a number (0 - 255): ";
	unsigned short inputNum = 0;
	cin >> inputNum;

	bitset<8> inputBits = (inputNum);
	cout << inputNum << " in binary is " << inputBits << endl;

	bitset<8> bitwiseNOT = (~inputNum);
	cout << "Logical NOT ~" << endl;
	cout << "~" << inputBits << " = " << bitwiseNOT << endl;

	cout << "Logical AND, & with 00001111" << endl;
	bitset<8> bitwiseAND = (0x0F & inputNum);// 0x0F is hex for 0001111
	cout << "0001111 & " << inputBits << " = " << bitwiseAND << endl;

	cout << "Logical OR, | with 00001111" << endl;
	bitset<8> bitwiseOR = (0x0F | inputNum);
	cout << "00001111 | " << inputBits << " = " << bitwiseOR << endl;

	cout << "Logical XOR, ^ with 00001111" << endl;
	bitset<8> bitwiseXOR = (0x0F ^ inputNum);
	cout << "00001111 ^ " << inputBits << " = " << bitwiseXOR << endl;

	return 0;
}

输出:
Enter a number (0 - 255): 5
5 in binary is 00000101
Logical NOT ~
~00000101 = 11111010
Logical AND, & with 00001111
0001111 & 00000101 = 00000101
Logical OR, | with 00001111
00001111 | 00000101 = 00001111
Logical XOR, ^ with 00001111
00001111 ^ 00000101 = 00001010

9、按位右移操作符 (>>) 和按位左移操作符 (<<)

移位运算符将整个位序列向右或向左移动,因此除了在应用程序中具有其他用途之外,还可以帮助乘法或除以2的倍数。

#include <iostream>

using namespace std;

int main() 
{
	cout << "Enter a number:";
	int inputNum = 0;
	cin >> inputNum;

	int halfNum = inputNum >> 1;
	int quarterNum = inputNum >> 2;
	int doubleNum = inputNum << 1;
	int quadrupleNum = inputNum << 2;

	cout << "Quarter: " << quarterNum << endl;
	cout << "Half: " << halfNum << endl;
	cout << "Double: " << doubleNum << endl;
	cout << "Quadruple: " << quadrupleNum << endl;

	return 0;
}

输出:
Enter a number:5
Quarter: 1
Half: 2
Double: 10
Quadruple: 20

10、复合赋值运算符

在这里插入图片描述
在这里插入图片描述

11、使用sizeof查看变量占用的内存

sizeof (variable);
or
sizeof (type);

12、操作符优先级

在这里插入图片描述
在这里插入图片描述

总结

本章总结了C ++语句,表达式和运算符,主要总结了一下运算符,并了解了运算符优先级。

此文供学习交流使用,若有错误之处欢迎共同交流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值