C++——数据类型的运算(运算符的优先级)

简介: C++——数据类型的运算(运算符的优先级)

用于综合决策的逻辑运算

与C语言完全相同。

现实生活中,任何决策,都是根据多个因素,综合决策的!

有没有钱, 有没有时间, 实力允不允许?



逻辑与  &&

a

b

a && b

                          假


都为真,逻辑与才是真

只要有一个是假, 逻辑与就是假

相当于“而且”



应用场景:

当需要两个条件都满足时,就使用逻辑与

特别注意:


条件1  &&  条件2

当条件1为真时,才去判断条件2

当条件1为假时,就不再判断条件2

多个条件:

条件1 &&  条件2  && 条件3

#include <iostream>
#include <Windows.h>
using namespace std;
int main(void) {
      int money;
      int days;
      cout << "你有多少钱?";
      cin >> money;
      cout << "你看多少天的假期?";
      cin >> days;
      //如果存款大于10万,而且假期大于10天, 就去旅游
      if (money > 100000 && days > 10) {
            cout << "我要去旅游!" << endl;
      } else {
            cout << "还是在家里呆着" << endl;
      }
      system("pause");
      return 0;
}


逻辑或 ||


a

b

a || b

                          假


只要有一个是真, 结果就是真

都为假时,结果才是假

相当于“或者”



多个条件:

条件1  ||   条件2  || 条件3

应用场景:

只需要满足任意一个条件时,就使用逻辑或

特别注意:


条件1  ||  条件2

当条件1为真时,就不再判断条件2

当条件1为假时,才判断条件2

#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
int main(void) {
      int money;
      string love;
      cout << "你有多少钱?" << endl;
      cin >> money;
      cout << "你爱我吗?" << endl;
      cin >> love;  //回答: 爱  或者  不爱
      if (money > 1000000  ||   love == "爱" ) {
            cout << "我们结婚吧!" << endl;
      } else {
            cout << "你是一个好人!" << endl;
      }
      system("pause");
      return 0;
}

逻辑非 !

是”单目运算符”, 即:只有一个操作数

!条件


a

!a



相当于“不”

应用场景:

当需要不满足某条件时,就使用逻辑非


特别注意:

逻辑非,只对一个条件进行运算!

是一种“单目运算符”

#include <iostream>
#include <Windows.h>
using namespace std;
int main(void) {
      int money;
      int days;
      cout << "你的月薪多少?";
      cin >> money;
      if (!(money >= 30000)) {
            cout << "我是菜鸟, 薪资不到3万, 我要努力修炼!\n" << endl;
      } else {
            cout << "我要接外包\n" << endl;
      }
      system("pause");
      return 0;
}

操作硬件的位运算

问题:

把地址为0x80040的寄存器的最低4位设置为0110


解决方案:

使用位操作

什么是位?

内存的基本单元是字节, 一个字节有8位.


位与 &

0 & 0   0


0 & 1   0


1 & 0   0


1 & 1   1


对应位, 都是1,  结果才是1


// 00001000


// 00000011


// 00000000


cout <<  " 8 & 3 = " << (8 & 3) << endl;  


位或 |


0  |  0   0


0  |  1   1


1  |  0   1


1  |  1   1


对应位, 都是0, 结果才是0


只要有一位是1, 结果就是1


// 00001000


// 00000011


// 00001011


cout <<  " 8 | 3 = " << (8 | 3) << endl;

位非 ~


~ 1   0

~ 0   1

取反

// 00001000

unsignedchar x = ~8;

cout << (int)x << endl;  //247


异或 ^


0 ^ 0  0

1 ^ 1  0

0 ^ 1  1

1 ^ 0  1

对应位不同, 结果才是1

// 00001000

// 00000011

// 00001011

cout << (8^3) << endl;  //11


<< 左移

右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃。

向左移动 n个位置,就等同于乘以 2的n次方

只适用于: int/short/long/char 等定点数类型(float/double浮点数类型不能使用)

// 00001000

// 01000000

cout << (8<<3) << endl;   //8*2*2*2 = 64


>> 右移

如果左操作数是无符号类型,则左边多出来的位用 0 来填充。

如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。

向左移动 n个位置,就等同于除以 2的n次方


只适用于: int/short/long/char 等定点数类型(float/double浮点数类型不能使用)

// 00001000

// 00000001

cout << (8>>3) << endl;   //1

应用:

把一个整数的的最低4位设置为0110

cout << "请输入一个整数: " << endl;
cin >> x;
//把x的最低4位清0
x =  x & (~15);
//把x的最低4位设置为0110
x = x | 6;
cout << "x=" << x << endl;

其它运算

算术运算


+

x = 5 + 3;

-

x = 5 - 3;

*

x = 5 * 3;

/

x = 10 / 3;

  1. 两个整数相除,结果取整数部分
  2. 除数不能为0(也不要为0.0)

%

取余

x = 10 % 3;

//结果为1

只有整数和char类型可以做%运算

float和double类型不能做%运算



赋值运算

x = 10;  //把x的值设置为10, 把10写到变量x中。

x = 10 + a;

左边必须是变量  

“优先级”很低,只比 ","(逗号元素符)高。


复合赋值运算

x += 10;       //  x = x + 10

x -= 10;        //  x = x - 10

类的还有: *= ,    /=,  %= 等。


自增自减运算


i++  =>  i = i+1

++i  =>  i = i+1

  1. -   =>  i = 1

--i  =>  i = i-1

i = 100;

x = i++;  // x = 100

i = 100;

x = ++i; // x= 101

后缀自增

x = i++;

x = i;

i=i+1;

先取值

再自增(自减)

后缀自减

x=i--;

x =i;

i=i-1;

前缀自增

x = ++i;

i=i+1;

x=i;

先自增(自减)

再取值

前缀自减

x = --i;

i=i-1;

x = i;

1.只能对变量做++和--运算,不能对变量和表达式做++和--运算


 5++;  //ERROR

(3+x)++;  //ERRO

2.建议尽量使用前缀自增(自减),以避免错误。


逗号运算符

优先级最低。

#include <stdio.h>
int main(void) {
       int x;
       // 先计算 x = 3+5,  再计算3*5
       x = 3+5, 3*5, 10/5;
       printf("x=%d\n", x);  //x=8
       //取最后一个表达式的值,作为整个“逗号表达式”的值
       x = (3+5, 3*5, 10/5); 
       cout  <<  x  <<  endl; //x=2
       return x;
}

三目运算符


条件 ?  表达式1 :表达式2

如果条件为真,就取表达式1作为整个表达式的值

如果条件为假,就取表达式2作为整个表达式的值


#include <iostream>
#include <Windows.h>
using namespace std;
int main(void) {
      int salary;
      printf("请输入您的月薪: ");
      scanf("%d", &salary);
      cout <<  (salary > 30000 ? "老鸟" : "菜鸟") << ", 晚上好!" << endl;
      system("pause");
      return 0;
}


使用多个运算符时的优先级


一共有15个级别!


不需强制记忆,只需要掌握以下常用的优先级:


最高优先级:( )和[ ]


最低优先级:逗号表达式


倒数第二低优先级:赋值和复合赋值(=, +=,  -=  ...)


x = a+ b*c;


! > 算术运算符 > 关系运算符 > && > || > 赋值运算符


(3 + 4 < 5  &&  6 > 7)  ||  (8 > 7);


相关文章
|
2月前
|
存储 Linux C语言
【C++基础】数据类型详解
这篇文章详细介绍了C++中各种基本数据类型,包括整型、浮点型、字符型、字符串型和布尔型,以及它们的使用方式和范围。
21 4
|
2月前
|
C++
【C++基础】运算符详解
这篇文章详细解释了C++中运算符的用法,包括算术运算符、赋值运算符、比较运算符和逻辑运算符,以及它们在表达式中的作用和示例。
25 2
|
3月前
|
C++
c++学习笔记02 运算符
C++学习笔记,介绍了C++中的运算符,包括基本的加减乘除、求模、前后置递增递减、赋值运算符、比较运算符和逻辑运算符的使用及其注意事项。
38 6
|
3月前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
46 4
|
3月前
|
存储 设计模式 算法
【C++】deque以及优先级队列
【C++】deque以及优先级队列
|
5月前
|
C++
C++之运算符
C++之运算符
|
5月前
|
安全 程序员 C++
C++一分钟之-重载运算符
【6月更文挑战第21天】C++的运算符重载让程序员能为自定义类型定制运算符行为,增强代码表达力。但要注意清晰性、优先级和返回类型。遵循运算符原有意义,充分测试,并用注释解释非直观设计。示例展示了如何为复数类重载`+`运算符。避免重载内置类型,注意结合性,且慎用隐式转换。重载应提升可读性而非复杂化代码。
45 2
|
5月前
|
C++
C++一分钟之-理解C++的运算符与表达式
【6月更文挑战第18C++的运算符和表达式构成了编程的基础,涉及数学计算、逻辑判断、对象操作和内存管理。算术、关系、逻辑、位、赋值运算符各有用途,如`+`、`-`做加减,`==`、`!=`做比较。理解运算符优先级和结合律至关重要。常见错误包括优先级混淆、整数除法截断、逻辑运算符误用和位运算误解。解决策略包括明确优先级、确保浮点数除法、正确使用逻辑运算符和谨慎进行位运算。通过实例代码学习,如 `(a &gt; b) ? &quot;greater&quot; : &quot;not greater&quot;`,能够帮助更好地理解和应用这些概念。掌握这些基础知识是编写高效、清晰C++代码的关键。
35 3
|
4月前
|
存储 编译器 C++