【C++】运算符与表达式(学习笔记)

一、运算符和表达式

1、运算符概述

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号

2、表达式概述

在程序中,运算符是用来操作数据的,因此,这些数据也被称为操作数

使用运算符将操作数连接而成的式子称为表达式

3、算法运算符

运算符 描述
+ 把两个操作数相加
- 从第一个操作数中减去第二个操作数
* 把两个操作数相乘
/ 分子除以分母
% 取模运算符,整除后的余数
++ 自增运算符,整数值增加 1
自减运算符,整数值减少 1

4、关系运算符

运算符 描述
== 检查两个操作数的值是否相等,如果相等则条件为真
!= 检查两个操作数的值是否相等,如果不相等则条件为真
> 检查左操作数的值是否大于右操作数的值,如果是则条件为真
< 检查左操作数的值是否小于右操作数的值,如果是则条件为真
>= 检查左操作数的值是否大于或等于右操作效的值,如果是则条件为真
<= 检套左操作数的值是否小于或等于右操作数的值,如果是则条件为真

5、逻辑运算符

运算符 描述
&& 逻辑与运算符。如果两个操作数都非零,则为真
|| 逻辑或道算符:如果两个操作数中有任意一个非零,则为真
! 逻辑非运算符。真假逆转

6、赋值运算符

运算符 描述
= 赋值运算符,把右边操作数的值赋给左边操作数
+= 把右边操作数加上左边操作数的结果赋值给左边操作救
-= 把左边操作数减去右边操作数的结果赋值给左边操作救
*= 把右边操作数乘以左边操作数的结果赋值给左边操作救
/= 把左边操作数除以右边操作数的结果赋值给左边操作救
%= 求两个操作数的模赋值给左边操作数
<<= 左移且赋值运算符
>>= 右移且赋值运算符
&= 按位与且赋值运算符
^= 按位异或且赋值运算符
|= 按位或且赋值运算符

7、位运算符

1)位逻辑运算符

&:位与

^:位异或

|:位或

~:位取反

p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

2)移位运算符

<<:左移运算符

>>:右移运算符

8、杂项运算符

运算符 描述
sizeof sizeof 运算符返回变量的大小
Condition ? X : Y 条任运算符。如果 Condition 为真,返回值为 X,否则值为Y
, 逗号运算符会顺序放行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的
. 和 -> 成号运算符用于引用类、结构和共用体的成员
Cast 强制转换运算符。把一种数据类型转换为另一种数据类型
& 指针运篁符。返回变量的地址
* 指针运算符。指向一个交量

9、运算符优先级

一般来说,一元运算符优先级高于对应的二元运算符

弄不清楚优先级,就加括号

二、补码

1、机器数和真值

机器数:一个数在计算机中的二进制表示形式

机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1

真值:真正的数学意义上的数值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值

00000000000000000000000000000011 --> +3

2、无符号数的编码

机器数 2^3(=8) 2^2(=4) 2^1(=2) 2^0(=1) 真值
0001 0 0 0 1 1
0101 0 1 0 1 5
1011 1 0 1 1 11
1111 1 1 1 1 15

3、有符号数的补码

机器数 2^3(=8) 2^2(=4) 2^1(=2) 2^0(=1) 真值
0001 -0 0 0 1 1
0101 -0 1 0 1 5
1011 -1 0 1 1 -5
1111 -1 1 1 1 -1

4、另一种计算补码的方法

对正数:直接按位计算权重和

对负数:保留符号位,对后面每位取反+1

5、字节序 (Byte Ordering)

大端法(Big Endian):大多数IBM 机器,Internet传输

小端法(Little Endian):Intel 兼容机

6、关于位运算的补充说明

左移运算比较简单:末尾补零

右移运算会有两种情况:

  1. 逻辑右移:移走的位填充为0
  2. 算术右移:移走的位填充与符号位有关,负数填充1

对有符号的数,尽可能不要使用右移运算,运算取决于编译器

你可能感兴趣的:(c++,学习,笔记)