一、数据存储
二进制数在内存中以补码的形式存放。正数的反码、补码均为本身。负数的反码为符号位不变且其余位取反,补码为反码+1。
二、位运算
①按位取反:反转操作数中的所有位。
②按位与:仅当两个操作数都是1,结果为1。否则为0。
③按位或:只要有一个操作数是1,结果为1。否则为0。
④按位异或:只有一个操作数是1,结果为1。否则为0。
⑤左移:将不包括符号位的所有数值向左移动指定次数,右边补充0。每左移一位相当于*2。
⑥右移:将不包括符号位的所有数值向右移动指定次数,左边补充0。每右移一位相当于/2。
⑦无符号右移:将包括符号位的所有数值向右移动指定次数,仅对宽度为32、64的数值有意义,更小的数值会自动提升。
三、示例
class Solution { public static void main(String[] args) { byte a = 42;//00101010 byte b = 15;//00001111 System.out.println(~a);//按位取反结果为11010101 补码为10101011 System.out.println(a & b);//按位与结果为00001010 System.out.println(a | b);//按位或结果为00101111 System.out.println(a ^ b);//按位异或结果为00100101 byte c = 64;//01000000 System.out.println(c << 1);//左移1位结果为10000000 System.out.println(c >> 1);//右移1位结果为00100000 int d = -1;//11111111 111111111 111111111 111111111 System.out.println(d >>> 24);//无符号右移24位结果为00000000 00000000 00000000 11111111 } }