§ 3.4位运算符
位运算符用来对二进制位进行操作,Java中提供了如下表所示的位运算符 :
位 运 算 符 中 ,除 ~ 以 外 ,其余均为二元运算符 。
操 作 数 只 能 为 整 型 和 字 符 型 数 据 。
3.4.1补 码
Java使用补码来表示二进制数 ,在补码表示中 ,最高位为符号位 ,正数的符号位为0,负数为 1。 补码的规定如下 :
对 正 数 来 说 ,最 高 位 为 0,其 余 各 位 代 表 数 值 本 身 (以 二 进 制 表 示 ),如 +42的 补 码 为 00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码 。 如-42的 补 码 为 11010110 (00101010 按 位 取 反 11010101 +1 11010110 ) 用补码来表示数,0的补码是唯一的,都为00000000。 (而在原码,反码表示中,+0和 -0的表示是不唯一的,可参见相应的书籍 )。而且可以用111111表示 -1的补码(这也是补码与原码和反码的区别)。
3.4.2按位取反运算符 ~
~ 是一元运算法,对数据的每个二进制位取反 ,即把 1变为 0,把0变为1。
例 如 :
0010101
~
1101010
注 意 ,~ 运算符与 - 运算符不同 ,~ 21≠ -21。
3.4.3按 位 与 运 算 符 &
参与运算的两个值,如果两个相应位都为1,则该位的结果为 1,否则为0。 即 :
0 & 0 = 0,0 &1 = 0,1 & 0 = 0,1 & 1 = 1