Java位运算

1.简介

位运算符是用来对二进制位进行操作的,包括”与(&)”、”或(|)”、”异或(^)”、”非(~)”、”左位移(<<)”、”右位移(>>)”、”无符号右移(>>>)”

2.与(&)

两个操作数的对应位都为1时,该位的结果1,其余情况都为0。

操作数 数值 数值 数值 数值
操作数1 0 0 1 1
操作数2 0 1 0 1
与(&)运算结果 0 0 0 1
/**
 * a&b的结果是:8
 * 1010
 * 1100
 * 1000
 */

public static void main(String[] args) {
    int a = 10;
    int b = 12;
    System.out.println("a&b的结果是:" + (a & b));
    System.out.println(Integer.toBinaryString(a));
    System.out.println(Integer.toBinaryString(b));
    System.out.println(Integer.toBinaryString(a & b));
}

3.或(|)

两个操作数的对应位只要其中一个为1,该位的结果为1,其余情况都为0。

操作数 数值 数值 数值 数值
操作数1 0 0 1 1
操作数2 0 1 0 1
或(|)运算结果 0 1 1 1

4.异或(^)

两个操作数的对应位如果不同,该位的结果为1,其余情况都为0。

操作数 数值 数值 数值 数值
操作数1 0 0 1 1
操作数2 0 1 0 1
异或(^)运算结果 0 1 1 0

5.非(~)

将操作数位的值取反,0转换为1,1转换为0。

6.左位移(<<)

正数的二进制数的第一位为0,负数的二进制数的第一位为1。

6<<2的结果为24

0000 0000 0000 0000 0000 0000 0000 0110  6的二进制数

0000 0000 0000 0000 0000 0000 0001 1000  24的二进制数

-6<<2的结果为-24

1111 1111 1111 1111 1111 1111 1111 1010  -6的二进制数

1111 1111 1111 1111 1111 1111 1110 1000  -24的二进制数

在左位移时,高位舍弃,低位用0补位。在数字没有溢出的前提下,左移1位,相当于乘以2的1次方,左移n位,相当于乘以2的n次方。

7.右位移(>>)

正数的二进制数的第一位为0,负数的二进制数的第一位为1。

6>>2的结果为1

0000 0000 0000 0000 0000 0000 0000 0110  6的二进制数

0000 0000 0000 0000 0000 0000 0000 0001  1的二进制数

-6>>2的结果为-2

1111 1111 1111 1111 1111 1111 1111 1010  -6的二进制数

1111 1111 1111 1111 1111 1111 1111 1110  -2的二进制数

在右位移时,低位舍弃,正数高位补0,负数高位补1。在数字没有溢出的前提下,右移1位,相当于除以2的1次方,左移n位,相当于除以2的n次方,结果取商接近的最小整数。

8.无符号右移(>>>)

正数的二进制数的第一位为0,负数的二进制数的第一位为1。

6>>>2的结果为1

0000 0000 0000 0000 0000 0000 0000 0110  6的二进制数

0000 0000 0000 0000 0000 0000 0000 0001  1的二进制数

-6>>>2的结果为1073741822

1111 1111 1111 1111 1111 1111 1111 1010  -6的二进制数

0011 1111 1111 1111 1111 1111 1111 1110  1073741822的二进制数

在右位移时,低位舍弃,高位补0。

最后,欢迎关注微信公众号一起交流


原文始发于微信公众号(阿喵程序园):Java位运算

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42855.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!