JAVA位运算

Java定义的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long(64位)、int(32位)、short(16位)、char(16位无符号)、byte(8位),其中 1字节等于8位,即1 byte = 8 bit。
位运算说穿了,就是直接对整数在内存中的二进制位进行操作。

整数类型范围 -2^(n-1) ~ 2^(n-1)-1java计算最大值
long-2^63 ~ 2^63-1Long.MAX_VALUE
int-2^31 ~ 2^31-1(-2147483648 ~ 2147483647)Integer.MAX_VALUE
char0 ~ 2^16-1(0 ~65535)Short.MAX_VALUE
short-2^15 ~ 2^15-1(-32768 ~ 32767)Character.MAX_VALUE + 0
byte-2^7 ~ 2^7-1(-127 ~ 128)Byte.MAX_VALUE



1.左移(<<) 高位舍弃,低位补0
int类型实例:5 << 2

0000 0000 0000 0000 0000 0000 0000 0101 // 5
0000 0000 0000 0000 0000 0000 0001 0100 // 向左移动2位,结果20
System.out.println(5 << 2); // 20 

向左移n 位,就相当于乘上2 的n 次方。
即5向左移动2位,结果5 * 2^2 = 20。
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。

2.右移(>>)高位补符号位(即正数补0,负数补1),低位舍弃
int类型实例1:5 >> 2

0000 0000 0000 0000 0000 0000 0000 0101 // 5
0000 0000 0000 0000 0000 0000 0000 0001 // 向右移动2位,结果1
System.out.println(5 >> 2); // 1

右移n 位,就相当于除上2 的n 次方。
即5向右移动2位,结果5 / (2^2) = 1 (向下取整。例如 1.5取值1;-1.5取值 -2)

int类型实例2:-5 >> 2

1111 1111 1111 1111 1111 1111 1111 1011 // -5
1111 1111 1111 1111 1111 1111 1111 1110 // 向右移动2位,结果-2
System.out.println(-5 >> 2); // -2

3.无符号右移(>>>) 高位补0,低位舍弃
int类型实例:-5>>>2

1111 1111 1111 1111 1111 1111 1111 1011 // -5
0011 1111 1111 1111 1111 1111 1111 1110 // 向右移动2位,高位补0,结果1073741822
System.out.println(-5 >>> 2); // 1073741822

4.按位与(&)
同时为1时,结果为1,否则为0

0011 // 3
0101 // 5
0001 // 3 & 5,结果 1

5.按位或(|)
一边为1时,结果为1,否则为0
6.按位异或(^)
两边的位不同时,结果为1,否则为0

1100 // 12
1010 // 10
0110 // 12^10,结果6

7.按位取反(~)
0变1,1变0

0000 0000 0000 0000 0000 0000 0000 1100 // 12
1111 1111 1111 1111 1111 1111 1111 0011 // ~12,结果-13
System.out.println(~12); // -13

备注:
1. java采用unicode,2个字节(16位)来表示一个字符。”中”这个中文字符的unicode就是2个字节,所以char型可以存放一个汉字。

char c ='中';

String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。


2. 计算机只能识别0和1,使用的是二进制,最高位存放符号(0为正,1为负)


3.如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,他们会被转换成int类型,并且得到的结果也是一个int类型的值。


4. java二进制、八进制、十进制、十六进制相互转换
二进制转十进制
Integer.parseInt(“110”, 2);

八进制转十进制
Integer.parseInt(“17”, 8);

十六进制转十进制
Integer.parseInt(“17”, 16);

十进制转成二进制
Integer.toBinaryString(int i);

十进制转成八进制
Integer.toOctalString(int i);

十进制转成十六进制
Integer.toHexString(int i);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值