您的位置:首页 > 其它

二进制的位运算

2016-05-22 18:13 253 查看

(1)按位与运算 &

1 & 1 = 1, 0 & 1 = 0

51 & 5 即 0011 0011 & 0000 0101 =0000 0001 = 1;

(2)按位或运算 |

1 | 0 = 1,1|1 =1, 0|0 =0
51 | 5 即 0011 0011 | 0000 0101 =0011 0111 =55;

(3)异或运算 ^

1 ^ 1 = 0,1 ^ 0 = 1 ,0^ 0 = 0(两个位的值不同,则结果为1,相同结果为0)

51 ^ 5 即 0011 0011 ^0000 0101 =0011 0110=54;

(4)<<左移运算符

1.将一个运算对象的各二进制位全部左移若干位(左边的二进制丢弃,右边补0)

(注意:java中 整数位 32位)

11 << 2 = 44

-14 <<2 =-56

-14的二进制(11111111 11111111 11111111 11110010)左移2位

为 11111111 11111111 11111111 11001000

结果为(-56)(后面讲述负数在二进制中如何表示的)

(5)>>右移运算符

将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1.

4
>> 2 = 1;

-14
>> 2 = -4;

(6)~按位取反

~6 = -7

(7)>>>无符号右移运算符

二进制各个位向右移指定的位数,右移后左边空出来的位用零来填充,移出右边的位被丢弃。

-14 >>> 2 =11111111
11111111 11111111 11110010 => 00111111 11111111 11111111 11111100 =1073741820

(8)<<<无符号左移运算符

二进制各个位向左移指定的位数,左移后右边空出来的位用零来填充,移出左边的位被丢弃。

3
<<< 1 = 6

(9)二进制中负数的计算

负数以正数的补码表示

原码:一个整数按照绝对值的大小转化成二进制的数

反码:将二进制数按位取反

补码:反码加 1

以-14 举例

原码:14 即 00000000 00000000 00000000 00001110

反码: 11111111 11111111 11111111 11110001

补码: 11111111 11111111 11111111 11110010

所以-14 的二进制是 11111111 11111111 11111111 11110010

假设 我们得到 二进制让我们求整数 就是倒着来取相反数

如二进制是 11111111 11111111 11111111 11110010

得到反码减1 11111111 11111111 11111111 11110001

原码: 00000000 00000000 00000000 00001110

即 1110 = 14 所以取反 就是-14

public static void main(String[] args) {
/*
* 十进制转化为其他进制
*/
//二进制
System.out.println(Integer.toBinaryString(0));
//16进制
System.out.println(Integer.toHexString(112));
//8进制
System.out.println(Integer.toOctalString(112));
/*
* 其他进制转化为是十进制
*/
//二进制
System.out.println(Integer.parseInt("1110000", 2));
//8进制
System.out.println(Integer.parseInt("71", 8));
//16进制
System.out.println(Integer.parseInt("A1", 16));

}


public class phone {
/*
* 转化int 为byte数组
*/
public static byte[] int2Bytes(int id){

byte[] arr = new byte[4];
//		arr[0] = (byte)((int)(id >> 0*8)& 0xff);
//		arr[1] = (byte)((int)(id >> 1*8)& 0xff);
//		arr[2] = (byte)((int)(id >> 2*8)& 0xff);
//		arr[3] = (byte)((int)(id >> 3*8)& 0xff);
for (int i = 0; i < arr.length; i++) {
arr[i] = (byte)((int)(id >> i*8)& 0xff);
}
return arr;
}
/*
* 转化byte数组为 int
*/
public static int bytes2Int(byte[]arr){
//		int rs0 = (int)((arr[0]& 0xff) << 0*8);
//		int rs1 = (int)((arr[1]& 0xff) << 1*8);
//		int rs2 = (int)((arr[2]& 0xff) << 2*8);
//		int rs3 = (int)((arr[3]& 0xff) << 3*8);
int result =0;
for (int i = 0; i < arr.length; i++) {
result += (int)((arr[i]& 0xff) <<i*8);
}

return result;
}

public static void main(String[] args) {
byte[] arr = phone.int2Bytes(8143);
System.out.println(arr[0]+","+arr[1]+","+arr[2]+","+arr[3]);
System.out.println(phone.bytes2Int(arr));
//字符串与字符数组
String info="好好学习,天天向上";
byte[] barr = info.getBytes();

String des = new String(barr);
System.out.println(des);
}
}


如有不对,请指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: