按位逻辑运算符
& 逻辑与
| 逻辑或
^ 逻辑异或
~ 反码
- 按位与运算符(bitwise AND operator)
a & b
按位计算a和b的逻辑与; - 按位或运算符(bitwise inclusive OR operator)
a | b
按位计算a和b的逻辑或; - 按位异或运算符(bitwise exclusive OR operator)
a ^ b
按位计算a和b的逻辑异或; - 按位反运算符(~operator)
~a
计算a的反码(将每一位取反之后的值);
a & b
两者都为1时结果为1;
a | b
只要有一个为1,结果就为1;
a ^ b
有且只有一个为1结果才为1;
~a
如果是0则结果为1,如果是1则结果为0;
这些运算符的操作数必须是整数类数据类型或者枚举型。如果应用于浮点型等数据类型的操作数,编译时就会出错。
逻辑运算符和按位逻辑运算符区别
&, |, ~
运算符会根据1为真,0为假的规则对操作数的各二进制进行逻辑运算。
&&, ||, !
运算符会根据非0为真,0为假的规则对操作数的值进行逻辑运算。
5 & 4 -> 4 5 && 4 -> 1
位移运算符
<<运算符 a << b
将a左移b位,右面空出的位用0填充。
>>运算符 a >> b
将a右移b位
当操作数是有符号整型的负数时,位移运算的结果因编译器而已。在许多编译器中,会执行逻辑位移(logical shift) 或 算术位移(arithmetic shift) 。
无论采用哪种方法都会降低程序的可移植性,所以不要对负数进行位移 。
有符号整数的内部表示
用最高位表示数值的符号。
如果该数为负,则符号为1;
如果该数不为负,则符号为0;
网友评论