Java 学习之路(九)- Java中的位运算符

字面值的八进制和十六进制

0 开头的整数为八进制

  • 05 就是十进制的 5
  • 011 就是十进制的 9

0x 开头的整数位十六进制

  • 0xf 就是十进制的 15
  • 0x11 就是十进制的 17
int a = 05;
int b = 011;
int c = 0xF;
int d = 0x11;

System.out.println(a); // 5
System.out.println(b); // 9
System.out.println(c); // 15
System.out.println(d); // 17

按位运算符

  • 按位并(AND):&
  • 按位或(OR)::l
  • 按位异或(XOR):^
  • 按位取反:~
// 二进制的 1111 1000
int a = 0xF8;
// 二进制的 1111 0100
int b = 0xF4;
// 二进制的 1111 1111
int c = 0xFF;
System.out.println(a & b); // 240
System.out.println(a | b); // 252
System.out.println(a ^ b); // 12

System.out.println(~c); // -256

位移运算符

  • >>:符号位不动,其余位右移,符号位后边正数补0,负数补1。又称带符号右移
  • >>>:符号位一起右移,左边补0,又称无符号右移
  • <<:左移,右边补0。左移没有带符号位一说,因为符号位在最左侧

注意:位运算符不会改变变量的值。

int a = 0x400;
System.out.println(a);
System.out.println(a >> 1);
System.out.println(a >> 2);

System.out.println(a << 1);
System.out.println(a << 2);

int b = -0x400;
System.out.println(b);
System.out.println(b >> 1);
System.out.println(b >> 2);

System.out.println(b << 1);
System.out.println(b << 2);

System.out.println(b >>> 1);
System.out.println(b >>> 2);
int base = 1;
// 0001
int is_student_mask = base;
// 0010
int is_programmer_mask = base << 1;
// 0100
int is_driver_mask = base << 2;
// 1000
int is_painter_mask = base << 3;

// 0101
int data = 5;

// 0101 & 0001 = 1
boolean isStudent = (data & is_student_mask) != 0;
System.out.println(isStudent);

// 0101 & 0010 = 0
boolean isProgrammer = (data & is_programmer_mask) != 0;
System.out.println(isProgrammer);

// 0101 & 0100 = 0100
boolean isDriver = (data & is_driver_mask) != 0;
System.out.println(isDriver);

// 0101 & 1000 = 0
boolean isPainter = (data & is_painter_mask) != 0;
System.out.println(isPainter);
int a = 0x400;
int b = 0xF4;
int c = 0xFF;

System.out.println(a >> 2);
System.out.println(~a);
System.out.println(a | 0x8);

System.out.println(a);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值