概述
文章目录
- 问题:
- 位运算符的用法
- &运算符
- |运算符
- ^运算符
- ~运算符
问题:
java源码中的位运算是如何使用的?
位运算符的用法
java中的“&”、“|”、“^”、“~”逻辑运算符的使用,此处使用了int类型,4个字节32位
&运算符
&是AND运算符,是一种位运算符。有0为0,全1为1。
运算规则如下:
- 1&1=1;
- 1&0=0;
- 0&1=0;
- 0&0=0;
/**
* &是AND运算符,是一种位运算符。有0为0,全1为1
* 运算规则如下:
* 1&1=1;
* 1&0=0;
* 0&1=0;
* 0&0=0;
*/
@Test
public void test01() {
//a的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0111
int a = 7;
print2Binary(a);
//b的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0010
int b = 2;
print2Binary(b);
//c=a&b的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0010
int c = a & b;//十进制为2
System.out.println("a&b=" + c);
print2Binary(c);
}
运算结果:
十进制数[7]二进制补码表示为:111
十进制数[2]二进制补码表示为:10
a&b=2
十进制数[2]二进制补码表示为:10
|运算符
|是OR运算符,是一种位符。有1为1,全0为0
运算规则如下:
- 1|1=1;
- 1|0=1;
- 0|1=1;
- 0|0=0;
/**
* |是OR运算符,是一种位符。有1为1,全0为0
* 运算规则如下:
* 1|1=1;
* 1|0=1;
* 0|1=1;
* 0|0=0;
*/
@Test
public void test02() {
//a的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0111
int a = 7;
print2Binary(a);
//b的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0010
int b = 2;
print2Binary(b);
//c=a|b的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0111
int c = a | b;//十进制为7
System.out.println("a|b=" + c);
print2Binary(c);
}
运算结果:
十进制数[7]二进制补码表示为:111
十进制数[2]二进制补码表示为:10
a|b=7
十进制数[7]二进制补码表示为:111
^运算符
^是异或运算符,是一种位符。相同为0,不同为1
运算规则如下:
- 1^1=0;
- 1^0=1;
- 0^1=1;
- 0^0=0;
/**
* ^是异或运算符,是一种位符。相同为0,不同为1
* 运算规则如下:
* 1^1=0;
* 1^0=1;
* 0^1=1;
* 0^0=0;
*/
@Test
public void test03() {
//a的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0111
int a = 7;
print2Binary(a);
//b的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0010
int b = 2;
print2Binary(b);
//c=a^b的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0101
int c = a ^ b;//十进制为5
System.out.println("a^b=" + c);
print2Binary(c);
}
运算结果:
十进制数[7]二进制补码表示为:111
十进制数[2]二进制补码表示为:10
a^b=5
十进制数[5]二进制补码表示为:101
~运算符
~是非运算符,是一种位符。0取反为1,1取反为0
运算规则如下:
- ~1=0;
- ~0=1;
/**
* ~是非运算符,是一种位符。0取反为1,1取反为0
* 运算规则如下:
* ~1=0;
* ~0=1;
*/
@Test
public void test04() {
//a的二进制补码表示为:0000 0000 0000 0000 0000 0000 0000 0111
int a = 7;
print2Binary(a);
/**
* b按位二进制补码表示为 1111 1111 1111 1111 1111 1111 1111 1000
* b的二进制原码表示则为 1000 0000 0000 0000 0000 0000 0000 1000
* 原码的第一位为符号位1代表负数,值为-8
*/
int b = ~a;
System.out.println("~a取反为:" + b);
print2Binary(b);
}
运算结果:
十进制数[7]二进制补码表示为:111
~a取反为:-8
十进制数[-8]二进制补码表示为:11111111111111111111111111111000
其中打印二进制的方法print2Binary
如下:
/**
* 打印十进制数二进制
*
* @param a
*/
private void print2Binary(int a) {
StringBuilder sb = new StringBuilder();
sb.append("十进制数[");
sb.append(a);
sb.append("]二进制补码表示为:");
sb.append(Integer.toBinaryString(a));
System.out.println(sb.toString());
}
其他位运算:<< 、>>在《java位于算——一个测试搞懂位运算》中有做说明
最后
以上就是甜美铃铛为你收集整理的java中的“&”、“|”、“^”、“~”运算符怎么用?的全部内容,希望文章能够帮你解决java中的“&”、“|”、“^”、“~”运算符怎么用?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复