本文主要详细介绍Java中的位运算符。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
:
目录
1.(按位AND运算符)2。|(按位OR运算符)3。(异或运算符)4。(左移运算符)5。(右移位运算符)6。~(求反运算符)7。(无符号右移运算符)(1)正数无符号右移(2)负数无。
1. (按位与运算符)
按位AND的运算规则是将两边的数转换成二进制位,然后计算出最终值。运算规则是:11=1,10=0,01=0,00=0
公共类Main {
公共静态void main(String[] args) {
//按位AND,先将运算符两边的条件值转换成二进制,再进行比较运算。
/**
* 0 0 1 1
* 0 1 0 1
* -
* 0 0 0 1
*/
int a=35
/**
* 0 0 0 1
* 0 0 1 0
* -
* 0 0 0 0
*/
int b=12
system . out . println(a);//1
system . out . println(b);//0
}
}
2. |(按位或运算符)
|按位或和按位与计算方法都是二进制转换和重算,不同的是运算规则(一为真,则为真):1|0=1,1|1=1,0|0=0,0|1=1。
公共类Main {
公共静态void main(String[] args) {
//|按位OR,运算符两边的条件值会先转换成二进制,然后再进行比较运算。
/**
* 0 0 1 1
* 0 1 0 1
* -
* 0 1 1 1
*/
int a=3 | 5;
/**
* 0 0 0 1
* 0 0 1 0
* -
* 0 0 1 1
*/
int b=1 | 2;
system . out . println(a);//7
system . out . println(b);//3
}
}
3. ^(异或运算符)
顾名思义,异或运算符是不一样的,它的运算规则是1 0=1,1 1=0,0 1=1,0 0=0。
公共类Main {
公共静态void main(String[] args) {
/**
* 0 0 1 1
* 0 1 0 1
* -
* 0 1 1 0
*/
int a=3^5;
/**
* 0 0 0 1
* 0 0 1 0
* -
* 0 0 1 1
*/
int b=1^2;
system . out . println(a);//6
system . out . println(b);//3
}
}
4. (左移运算符)
52表示二进制位5向左移动两位,0向右添加。
5的二进制位是0000 0101,即把有效值101左移两位数就是0001 0100。正数左边第一位用0填充,负数用1填充,等于乘以2的n次方。十进制位是5 * 2 ^ 2=20。
公共类Main {
公共静态void main(String[] args) {
/**
* 52表示二进制位5向左移动两位,0向右添加。
* 0 0 0 0 0 1 0 1
* 0 0 0 1 0 1 0 0
*/
system . out . println(52);//20
}
}
5. (右移移运算符)
在后续处理之前,每个位运算符都将值转换为二进制。
5的二进制位是0000 0101,右移两位意味着左移101到0000 001。正数左边第一位补0,负数补1,等于n次方除以2,结果是1。
公共类Main {
公共静态void main(String[] args) {
/**
* 52表示二进制位5向右移动两位,0向左添加。
* 0 0 0 0 0 1 0 1
* 0 0 0 0 0 0 0 1
*/
system . out . println(52);//1
}
}
6. ~(取反运算符)
反过来就是1是0,0是1。
5的二进制位是0000 0101,反转位是1111 1010,值是-6
公共类Main {
公共静态void main(String[] args) {
/**
* 0 0 0 0 0 1 0 1
* -
* 1 1 1 1 1 0 1 0
*
* 1.如果11111010要转换成负十进制,因为最高位是1,所以11111001减1得到1111001。
* 2.反转00010101,然后将0000100对应的十进制数算为6。
* 3,所以11111010的十进制是-6。
*
* 1 1 1 1 1 0 1 0
* - 0 0 0 0 0 0 0 1
* -
* 1 1 1 1 1 0 0 1
* -
* 0 0 0 0 0 1 0 0
*/
system . out . println(~ 5);//-6
}
}
7. (无符号右移运算符)
(1) 正数无符号右移
无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移动多少位补0。
5的二进制位是0000 1111,右移2位,结果是3。
公共类Main {
公共静态void main(String[] args) {
/**
* 0000 1111
* -
* 0000 0011
*/
system . out . println(152);//3
}
}
(2) 负数无符号右移
-6的二进制是6加1,6的二进制反转,即0000 0000 0000 0000 0000 0110。反转后1111 1111 1111 1111 1111 1111 1111 1111 1010加1,右移三位:0001 1111 1111 1111 1111。
公共类Main {
公共静态void main(String[] args) {
system . out . println(-63);//536870911
}
}
总结
本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。