运算符是一种告诉编译器执行特定的数学或逻辑操作的符号
在程序中,运算符是用来操作数据的,因此,这些数据也被称为操作数
使用运算符将操作数连接而成的式子称为表达式
运算符 | 描述 |
---|---|
+ | 把两个操作数相加 |
- | 从第一个操作数中减去第二个操作数 |
* | 把两个操作数相乘 |
/ | 分子除以分母 |
% | 取模运算符,整除后的余数 |
++ | 自增运算符,整数值增加 1 |
– | 自减运算符,整数值减少 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 |
<<
:左移运算符
>>
:右移运算符
运算符 | 描述 |
---|---|
sizeof | sizeof 运算符返回变量的大小 |
Condition ? X : Y | 条任运算符。如果 Condition 为真,返回值为 X,否则值为Y |
, | 逗号运算符会顺序放行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的 值 |
. 和 -> | 成号运算符用于引用类、结构和共用体的成员 |
Cast | 强制转换运算符。把一种数据类型转换为另一种数据类型 |
& | 指针运篁符。返回变量的地址 |
* | 指针运算符。指向一个交量 |
一般来说,一元运算符优先级高于对应的二元运算符
弄不清楚优先级,就加括号
机器数:一个数在计算机中的二进制表示形式
机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1
真值:真正的数学意义上的数值
因为第一位是符号位,所以机器数的形式值就不等于真正的数值
00000000000000000000000000000011 --> +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 | 11 |
1111 | 1 | 1 | 1 | 1 | 15 |
机器数 | 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 |
对正数:直接按位计算权重和
对负数:保留符号位,对后面每位取反+1
大端法(Big Endian):大多数IBM 机器,Internet传输
小端法(Little Endian):Intel 兼容机
左移运算比较简单:末尾补零
右移运算会有两种情况:
对有符号的数,尽可能不要使用右移运算,运算取决于编译器