💦运算符与表达式
💦 运算符
💦赋值运算符
单等号=
计算顺序从右向左
复合赋值运算符:+=、-=、*=、/=、%=等
💦算术运算符
一元运算符:++、–
如果++/–是单独的一条语句,那么前置和后置没有区别
在复杂语句中,前置++/–:将变量自增/自减1,然后在表达式中使用新值;后置++/–:在表达式中使用当前值,表达式运行完毕,变量再自增/自减1。
二元运算符:+、-、*、/、%
%取模时最终结果的符号与第一个操作数的符号一致
三元运算符:?:
string str=1>0?1:0;
💦关系运算符
>、<、>=、<=、==、!=等,结果为bool类型
💦逻辑运算符
💦位运算符
既然原码才是被人脑直接识别并用于计算表示的方式,为何还会有反码和补码呢?
首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位选择对应真值的加减。
但对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单。计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法。
我们知道,根据运算法则减去一个正数等于加上一个负数。1-1=1+(-1)所以机器可以只有加法而没有减法,这样计算机运算的设计就会更加简单了。
于是人们开始探索,将符号位也参与运算,并只保留加法的方法。
使用原码计算1-1=0:
1-1=1+(-1)=[00000001]原+[10000001]原=[10000010]原=-2
使用原码并让符号位也参与运算后,减法就会出现错误。
为了解决原码做减法的问题,出现了反码:
1-1=1+(-1)
=[00000001]原+[1000001]原
=1反+11111110反=[11111111]反
=[10000000]原
=-0
发现使用反码计算减法时,结果的真值部分是正确的。唯一的问题出现在的0这个特殊数值上,虽然人们理解+0和-0都是一样的,但是0带符号是没有意义的。而且会有[00000000]和[10000000]两个原码表示0
于是补码的出现,完美解决了0符号问题,以及两个编码的问题:
1-1=1+(-1)
=[00000001]原+[10000001]原
=[00000001]反+[11111110]反
=[00000001]补+[11111111]补
=[00000000]补=[0000000]原-正数的原码、反码、补码是一样的
这样,0用[00000000]表示,以前出现的-0问题就不存在了,而且可以用
[10000000]表示-128(这里注意:因为实际上是使用以前的-0补码来表示-128所以-128并没有原码和反码表示。对于从-128的补码[10000000]算出的原码是[00000000]-是不正确的!)
💦运算符优先级
()>一元运算符>sizeof>!>算术运算符>关系运算符>&&>||>赋值运算符>|
💦 表达式
符号与操作数的组合
💦if结构
先判断后执行
if(true){
//代码块1
}
else{
//代码块2
}
多重if结构
if(条件1){
//代码块1
}
else if(条件2){
//代码块2
}
else if(条件3){
//代码块3
}
else{
//代码块4
}
💦switch
#include <iostream>
using namespace std;
int main()
{
char input;
cin >> input;
switch (input)
{
case 'a': case 'A':
case 'e': case 'E':
case 'i': case 'I':
case 'o': case 'O':
case 'u': case 'U':
cout << input << "是元音字母" << endl;
break;
default:
cout << input << "不是元音字母" << endl;
break;
}
}