1.表示方法: 

    在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。  

    (1)正数的最高位为0,其余各位代表数值本身(二进制数)。  

    (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。

   

    2.位运算符  

    位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算。位运算符可以分为逻辑运算符(包括~、&、|和^)及移位运算符(包括>>、<<和>>>)。

    

    3.具体解析过程:

    

    public static void main(String[] args) {        // 1、左移( << )        /*         * 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数。         * 左移的规则只记住一点:丢弃最高位,0补最低位         * 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了332=1位。         *          * 2)运算规则 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 当左移的运算数是int         * 类型时,每移动1位它的第31位就要被移出并且丢弃; 当左移的运算数是long 类型时,每移动1位它的第63位就要被移出并且丢弃。         * 当左移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。         *          * 3)数学意义 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方         */        // 4)运算过程        // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0://        // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20        System.out.println(5 << 2);// 运行结果是20        // 2、右移( >> ) 高位补符号位        /*         * 1)它的通用格式如下所示: value >> num num 指定要移位值value 移动的位数。         * 右移的规则只记住一点:符号位不变,左边补上符号位         *          * 2)运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1         * 当右移的运算数是byte 和short类型时,将自动把这些类型扩大为 int 型。         * 例如,如果要移走的值为负数,每一次右移都在左边补1,如果要移走的值为正数,每一次右移都在左边补0,这叫做符号位扩展(保留符号位)(sign         * extension ),在进行右移         *          * 操作时用来保持负数的符号。         *          *          * 3)数学意义 右移一位相当于除2,右移n位相当于除以2的n次方。         */        // 4)运算过程        // 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:        // 0000 0000 0000 0000 0000 0000 0000 0001        System.out.println(5 >> 2);// 运行结果是1        // 3、无符号右移( >>> ) 高位补0        /*         * 它的通用格式如下所示: value >>> num num 指定要移位值value 移动的位数。         * 无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符>>> 只是对32位和64位的值有意义         */        // 例如 -5换算成二进制后为:0101 取反加1为1011        // 1111 1111 1111 1111 1111 1111 1111 1011        // 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:        System.out.println(5 >> 3);// 结果是0        System.out.println(-5 >> 3);// 结果是-1        System.out.println(-5 >>> 3);// 结果是536870911        // 4、位与( & )        // 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0        System.out.println(5 & 3);// 结果为1        System.out.println(4 & 1);// 结果为0        // 5、位或( | )        // 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0        System.out.println(5 | 3);// 结果为7        // 6、位异或( ^ )        // 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0        System.out.println(5 ^ 3);// 结果为6        // 7、位非( ~ )        // 操作数的第n位为1,那么结果的第n位为0,反之。        System.out.println(~5);// 结果为-6    }