java short长度位运算_Java 位运算符

位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。

位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下:

A = 0011 1100B= 0000 1101

-----------------A&B = 0000 1100A| B = 0011 1101A^ B = 0011 0001

~A= 1100 0011

下表列出了位运算符的基本运算,假设整数变量 A 的值为 60 和变量 B 的值为 13:

操作符描述例子

如果相对应位都是1,则结果为1,否则为0

(A&B),得到12,即0000 1100

|

如果相对应位都是 0,则结果为 0,否则为 1

(A | B)得到61,即 0011 1101

^

如果相对应位值相同,则结果为0,否则为1

(A ^ B)得到49,即 0011 0001

按位取反运算符翻转操作数的每一位,即0变成1,1变成0。

(〜A)得到-61,即1100 0011

<<

按位左移运算符。左操作数按位左移右操作数指定的位数。

A << 2得到240,即 1111 0000

>>

按位右移运算符。左操作数按位右移右操作数指定的位数。

A >> 2得到15即 1111

>>>

按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。

A>>>2得到15即0000 1111

实例

下面的简单示例程序演示了位运算符。复制并粘贴下面的Java程序并保存为Test.java文件,然后编译并运行这个程序:

Test.java 文件代码:

public classTest {public static voidmain(String[] args) {int a = 60; /*60 = 0011 1100*/

int b = 13; /*13 = 0000 1101*/

int c = 0;

c= a & b; /*12 = 0000 1100*/System.out.println("a & b = " +c );

c= a | b; /*61 = 0011 1101*/System.out.println("a | b = " +c );

c= a ^ b; /*49 = 0011 0001*/System.out.println("a ^ b = " +c );

c= ~a; /*-61 = 1100 0011*/System.out.println("~a = " +c );

c= a << 2; /*240 = 1111 0000*/System.out.println("a << 2 = " +c );

c= a >> 2; /*15 = 1111*/System.out.println("a >> 2 = " +c );

c= a >>> 2; /*15 = 0000 1111*/System.out.println("a >>> 2 = " +c );

}

}

以上实例编译运行结果如下:

a & b = 12a| b = 61a^ b = 49

~a = -61a<< 2 = 240a>> 2 = 15a>>> 2 = 15

整数格式化成二进制

public static voidmain(String[] args) {int a = 0xff;

String b=Integer.toBinaryString(a);

System.out.println(a);

System.out.println(b);

}

结果:

255

11111111

十六进制所占字节

1个十六进制占4位(bit),1个字节(B)占8位(bit),所以一个十六进制占0.5个字节,即一个字节可以表示两个十六进制(2个十六进制 = 1个字节);

Java中各进制表示

int a = 0b12;  //0b开头为二进制数

int b = 012;    //0开头为八进制数

int c = 11;      //默认为十进制数

int d = 0x11;  //0x开头为十六进制数

注:0是阿拉伯数字不是字母

例子:

位运算记录多选状态

public static voidmain(String[] args) {final int TYPE_ONE = 1 << 0;final int TYPE_TWO = 1 << 1;final int TYPE_THREE = 1 << 2;int state = 0;

state= state | TYPE_ONE;//添加

state = state |TYPE_TWO;

state= state |TYPE_THREE;

state= state ^ TYPE_THREE;//去除

String binaryString =Integer.toBinaryString(state);

System.out.println("Current state=" +state);

System.out.println("Binary string=" +binaryString);

System.out.println((state& TYPE_ONE) ==TYPE_ONE);

System.out.println((state& TYPE_TWO) ==TYPE_TWO);

}

byte转16进制字符串

public static final String bytesToHexString(byte[] bArray) {

StringBuffer sb= newStringBuffer(bArray.length);

String sTemp;for (int i = 0; i < bArray.length; i++) {

sTemp= Integer.toHexString(0xFF & bArray[i]); //1111 1111 & bArray[i]

if (sTemp.length() < 2)

sb.append(0);

sb.append(sTemp.toUpperCase());

}returnsb.toString();

}

将两个字节拼接还原成有符号的整型数据

public static int pinJie2ByteToInt(byte byte1, bytebyte2) {int result =byte1;

result= (result << 8) | (0x00FF &byte2);returnresult;

}

整型数据拆分为长度为2的字节数组,低8位存放在序号小的元素,高8位存放在序号大的元素中(小端存储)

public static byte[] chaiFenDataIntTo2Byte(intdata) {byte[] byteArray = new byte[2];

byteArray[0] = (byte) data;

byteArray[1] = (byte) (data >> 8);returnbyteArray;

}

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值