package com.example; public class MyClass2 { public static void main(String[] args) { /** * java位运算: * << 左移位,在低位处补0 * >> 右移位,若为正数则高位补0,若为负数则高位补1 * >>> 无符号右移位,无论正负都在高位补0 * &与(AND),对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0。 * |或(OR),对两个整型操作数中对应位执行布尔代数,两个位都为0时输出0,否则1。 * ~非(NOT),一元运算符。 * ^异或(XOR),对两个整型操作数中对应位执行布尔代数,两个位相等0,不等1。 */ /** 以 int型变量 -5,为例, [-5]原=1000 0000 0000 0000 0000 0000 0000 0101, [-5]补=1111 1111 1111 1111 1111 1111 1111 1010, [-5]补=1111 1111 1111 1111 1111 1111 1111 1011, */ // 1、左移( << ) // 1111 1111 1111 1111 1111 1111 1111 1011 然后左移2位后,低位补0:// // 1111 1111 1111 1111 1111 1111 1110 1100 运算结果 // 1000 0000 0000 0000 0000 0000 0001 0100 :运算结果的原码:十进制下为 - (4+16) = -20 System.out.println("-5 << 2= " + (-5 << 2));// 运行结果是-20 // 2、右移( >> ) 高位补符号位 // 1111 1111 1111 1111 1111 1111 1111 1011 然后右移2位,高位补1: // 1111 1111 1111 1111 1111 1111 1111 1110 运算结果 // 1000 0000 0000 0000 0000 0000 0001 0010 :运算结果的原码:十进制下为 - (2) = -2 System.out.println("-5 >> 2= " + (-5 >> 2));// 运行结果是-2 // 3、无符号右移( >>> ) 高位补0 // 1111 1111 1111 1111 1111 1111 1111 1011 右移2位,高位补0 // 0011 1111 1111 1111 1111 1111 1111 1110 运算结果 (符号位是0,运算结果应该是一个很大的正数) System.out.println("-5 >>> 2= " + (-5 >>> 2));// 结果是1073741822 } }