位运算符

来源:互联网 发布:全民枪战抽奖软件 编辑:程序博客网 时间:2024/05/18 01:16

位运算符(&,|,^,〜,<<,>>)


位运算符修改变量考虑的位模式,代表了它们存储的值。 

操作者ASM当量描述按位与|按位或^XOR按位异或一元补(位反转)<<SHL左移>>SHR右移

显式的类型转换操作符

类型转换运算符允许你转换到另一个给定类型的一个基准。 有几种方法可以做到这一点在C + +。 最简单的一个,这已经从C语言继承,是由括在括号(())之间的新型之前要转换的表达式: 

 1  2  3  
 int i; float f = 3.14; i = ( int ) f; 


前面的代码浮点数3.14转换为整数的值(3),其余的都将丢失。 这里,类型转换操作符(INT)。 另一种方法做同样的事情在C + +中使用函数符号:前要转换的表达式的类型和封闭括号之间的表达: 

 
 i = int ( f ); 


铸造型这两种方法是有效的C + +。 

大小()

此操作符接受一个参数,该参数可以是一个类型或变量本身,并返回该类型或对象的大小(以字节为单位): 

 
 a = sizeof ( char ); 


这将分配一个值1,因为char是一个字节长的类型。 
sizeof返回的值是一个常数,所以它始终是在程序执行前决定。 

其他运营商

后来在这些教程中,我们将看到更多的运营商,类似的指的指针或面向对象编程的细节。 每一个被视为在其各自的部分。 

运算符优先级

写复杂的表达式时,我们可能会与多个操作数有哪些操作数被评为第一和后来的一些疑虑。 例如,在这个表达式中: 

 
 a = 5 + 7 % 2 


我们可能会怀疑,如果它的真正含义: 

 1  2  
 a = 5 + (7 % 2) // with a result of 6, or a = (5 + 7) % 2 // with a result of 0 


正确的答案是两个表达式,结果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逗号左到右
分组定义运营商进行评估的情况下,有几家运营商相同的水平在一个表达式的优先顺序。 

所有这些优先级的运营商,可以操纵或变得更清晰,消除可能的歧义使用括号标志),在这个例子中: 

 
 a = 5 + 7 % 2; 


可能被写入为: 

 
 a = 5 + (7 % 2); 

 
 
 a = (5 + 7) % 2; 


这取决于我们要执行的操作。 

所以如果你想要写复杂的表达式,你是不是完全确定的优先级,总是包括括号。 它还会使你的代码更易于阅读。 
原创粉丝点击