二、B站尚硅谷C++11 实战项目

本章主要介绍运算符

一、表达式与运算符

运算优先级和结合律
平级运算从左往右,乘除优先级高于加减
一元运算符(正负号)优先级最高,接下来是乘除取余,最后加减

#include <iostream>
using namespace std;
int main() {
	//1.算数运算符
	cout << "1+2=" << 1 + 2 << endl;
	cout << "1+2-3*4=" << 1 + 2 - 3 * 4 << endl;

	int a = 20, b = 6;
	cout << "a+b=" << a + b << endl;
	cout << "a+1=" << a + 1 << endl;
	//整数除法,得到的结果是整数
	cout << "a/b=" << a / b << endl;
	short a2 = 3;
	long long b2 = 23435;
	//参加计算,会把数据类型小的转化为数据类型大的,再去做统一计算
	cout << "a2*b2=" << a2 * b2 << endl;
	cout << "b2/b=" << b2 / b << endl;

	float a3 = 20;
	//浮点数除法,得到结果是浮点数
	cout << "a3/b=" << a3 / b << endl;

	//取余运算,得到小数结果 余数不一定是正的
	// 取模运算只能对两个整数有效
	cout << "a%b=" << a % b << endl;
	cout << "-a%b=" << -a % b << endl;

	cin.get();

二、赋值

2.1赋值运算符

//2.赋值运算符
	a = 1;
	a = b + 5;
	const int c = 10;
	//c = b;//错误

	//用花括号括起来的数值列表,可以做赋值右侧对象
	a = {10};
	int arr[] = { 1,2,3,4,5 };
	//赋值结合律从右到左
	a = b = 10;

2.2 复合赋值运算符

//复合赋值运算符
int sum = a;
//sum = sum + b;
//sum = sum + c;
sum += b;
sum += c;

cout << "a+b+c=" << sum << endl;

2.3递增递减运算符

++a与a++表示的意思是一样的,均表示a = a+1,区别在做计算返回发的结果不一样
前置时,++a表示先加一,更新后的对象作为结果返回
后置时,a++先把对象直接返回,然后再加一

//递增递减运算符
cout << "++a=" << ++a << endl;

int i = 0, j;
//j = ++i;
j = i++;
cout << "i=" << i << endl;
cout << "j=" << j << endl;

输出i=1,j=0

三、关系和逻辑运算

3.1关系运算符

自左向右结合律

	 //关系
	cout << "1<2:" << (1 < 2) << endl;
	cout << "a<b:" << (a < b) << endl;
	cout << "10==4+6:" << (10 == 4 + 6) << endl;

	cout << "10==4+6:" << (10 == 4) + 6 << endl;
//逻辑
cout << "1<2&&3>5:" << (1 < 2 && 3 > 5) << endl;
cout << "1<2||3>5:" << (1 < 2 || 3 > 5) << endl;
cout << "!(1 < 2 || 3 > 5):" << !(1 < 2 || 3 > 5) << endl;
cin.get();

短路求值:如果左边计算得到最终结果,就不会计算右边结果

//短路求值
i = 0;
//1 < 2 && ++i;
1 < 2 || ++i;
cout << "i = " << i << endl;

输出:i=0

3.2 条件运算符

//条件运算符
cout << ((1 < 2 || ++i) ? "true" : "false") << endl;
cout << ((1 > 2 && ++i) ? "true" : "false") << endl;

3.3位运算符

非常底层的运算符,可以操作到具体的每一位(bit)数据
移位运算符,位逻辑运算符
<<左移运算符
输入输出会用到它,那是标准io库里面定义的运算符重载版本

在这里插入图片描述
使用程序员计算机查看二进制十进制十六进制的转换结果
在这里插入图片描述

	//4.位运算符
	unsigned char bits = 0xb5;
	cout << hex;//输出结果为16进制
	cout << "bits左移2位:" << (bits << 2) << endl;
	cout << "bits左移8位:" << (bits << 8) << endl;
	cout << "bits左移31位:" << (bits <<31) << endl;
	cout << "bits右移3位:" << (bits >> 3) << endl;

位运算符可以做简单的乘除算法

cout << dec;//十进制输出
cout << (200 << 3) << endl;//200*2的三次方
cout << (100>>2) << endl;//100/4

位逻辑运算符
按位取反~
位与&
位或| :只要有1,结果为1,如果全为0,结果对应位为0
异或^:两个对应位相同为0,相异为1

//位逻辑运算
cout << (~5) << endl;
cout<<(5 & 12) << endl;
cout << (5 | 12) << endl;
cout << (5 ^ 12) << endl;

按位取反,5(0…101)取反后最高位为1,是一个负数,负数(1…010)的底层二进制是补码形式,补码(1…010)=原码取反+1,所以原码=(补码-1)取反。补码-1=1…001,(补码-1)取反=0…110=6,加上他的负数符号为-6。

异或用途:
1.a^0 = a
a^a = 0

//案例:从一组数中找出只出现一次的那个数
int i1 = 5, i2 = 12, i3 = 9, i4 = 5, i5 = 12;
cout << "只出现一次的那个数为:" << (i1^i2^i3^i4^i5)<<endl;

4.类型转换

4.1隐式类型转换

C++编译器自动对类型进行转换,不需要我们干涉,将长度较小的类型转化为较大类型

// 5.类型转化
//隐式类型转化
short s = 15.2 + 20;
cout << "s=" << s << endl;
cout << "15.2 + 20" << (15.2 + 20)<< endl;
cout << "s的长度为" << sizeof(s) << endl;
cout << "15.2 + 20的长度为" << sizeof(15.2 + 20) << endl;
// 关系运算中的类型转换
//因为计算(0 < a < 100从左到右,0 < a结果为false,隐式类型转化后为0,
// 0< 100结果为true
a = -1;
cout << ((0 < a < 100) ? "true" : "false") << endl;
cout<<((0<a&& a < 100) ? "true" : "false") << endl;

4.1强制类型转换

//强制类型转换
int total = 20, num = 6;
double avg = total / num;
cout << "avg = " << avg << endl;

//C语言风格
cout << "avg = " << (double)total / num << endl;

//C++函数调用风格
cout << "avg = " << double(total) / num << endl;

//C++强制类型转换运算符
cout << "avg = " << static_cast<double>(total) / num << endl;
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值