位操作

一个表达式的结果与运算符的优先级(precedence)、结合性(associativity)、运算符的操作数计算次序(order of evaluation)相关。

bool 类型可以转换为任意算术类型,false 转换为 0true 转换为 1。不要与 true 做比较,不要写这样的代码:

if (val == true)     // do NOT write this

位运算符的整型操作数可以是 signed 或者 unsigned。如果操作数为负,则符号位的处理方式是平台相关的(machine-dependent)。因此,我们不应该对有符号数做位运算。

移位运算符 <<>>。当操作数为 unsigned 时,左右移位都补 0。当操作数为 signed 时(注意如果没有显式地加 unsigned,则 intshortlong 默认都是 signed 的),右移还是补 0,左移可以补符号位也可以补 0,这是由实现定义的(implementation defined)。这再一次说明了不应该对有符号数做位运算。注意移位运算的右操作数必须为非负,同时必须严格地小于左操作数拥有的位数,否则结果未定义(undefined)。


你可能感兴趣的:(表达式,优先级,write,false,左右)