位运算符(&,|,^,〜,<<,>>)
位运算符修改变量考虑的位模式,代表了它们存储的值。
操作者 | ASM当量 | 描述 |
---|---|---|
& | 与 | 按位与 |
| | 或 | 按位或 |
^ | XOR | 按位异或 |
〜 | 不 | 一元补(位反转) |
<< | SHL | 左移 |
>> | SHR | 右移 |
显式的类型转换操作符
类型转换运算符允许你转换到另一个给定类型的一个基准。 有几种方法可以做到这一点在C + +。 最简单的一个,这已经从C语言继承,是由括在括号(())之间的新型之前要转换的表达式: | |
前面的代码浮点数3.14转换为整数的值(3),其余的都将丢失。 这里,类型转换操作符(INT)。 另一种方法做同样的事情在C + +中使用函数符号:前要转换的表达式的类型和封闭括号之间的表达:
| |
铸造型这两种方法是有效的C + +。
大小()
此操作符接受一个参数,该参数可以是一个类型或变量本身,并返回该类型或对象的大小(以字节为单位): | |
这将分配一个值1,因为char是一个字节长的类型。
sizeof返回的值是一个常数,所以它始终是在程序执行前决定。
其他运营商
后来在这些教程中,我们将看到更多的运营商,类似的指的指针或面向对象编程的细节。 每一个被视为在其各自的部分。运算符优先级
写复杂的表达式时,我们可能会与多个操作数有哪些操作数被评为第一和后来的一些疑虑。 例如,在这个表达式中: | |
我们可能会怀疑,如果它的真正含义:
| |
正确的答案是两个表达式,结果6。 有一个既定秩序与每个运算符的优先级,不仅算术的(那些喜好来自数学),但可以出现在所有的运营商的C + +。 从最大到最低优先级,优先顺序如下:
水平 | 操作者 | 描述 | 分组 |
---|---|---|---|
1 | :: | 范围 | 左到右 |
2 | ()[]。 - > + + -的dynamic_cast的static_cast reinterpret_cast的const_cast会typeid的 | 后缀 | 左到右 |
3 | + + - 〜! SIZEOF新的删除 | 一元(前缀) | 从右到左 |
*& | 间接参考(指针) | ||
+ - | 一元的标志运营商 | ||
4 | (类型) | 类型转换 | 从右到左 |
5 | * - > * | 指针成员 | 左到右 |
6 | * /% | 乘法 | 左到右 |
7 | + - | 添加剂 | 左到右 |
8 | << >> | 转移 | 左到右 |
9 | <> <=> = | 关系的 | 左到右 |
10 | ==! | 平等 | 左到右 |
11 | & | 按位与 | 左到右 |
12 | ^ | 按位异或 | 左到右 |
13 | | | 按位OR | 左到右 |
14 | && | 逻辑与 | 左到右 |
15 | | | | 逻辑“或” | 左到右 |
16 | ?: | 有条件的 | 从右到左 |
17 | = * = / =%= + = - = >> = << =&= ^ = | = | 分配 | 从右到左 |
18 | , | 逗号 | 左到右 |
分组定义运营商进行评估的情况下,有几家运营商相同的水平在一个表达式的优先顺序。
所有这些优先级的运营商,可以操纵或变得更清晰,消除可能的歧义使用括号标志(兼),在这个例子中:
| |
可能被写入为:
| |
或
| |
这取决于我们要执行的操作。
所以如果你想要写复杂的表达式,你是不是完全确定的优先级,总是包括括号。 它还会使你的代码更易于阅读。