JAVA 位运算理解

java 的位运算符有&,| ,^,~,<<,>>,>>> 一共七个

位运算符是不支持浮点类型运算的,其中&,|,^ 这三个运算符可以支持boolean类型,其它4个不支持boolean类型

位运算一般用于整数的计算,主要针对二进制的运算

& (与运算符)

两个操作数中位数都为1,结果才为1,否则结果为0

例如:5 & 4

5  -> 101

4 -> 100

	101
&
	100
--------------
	100

| (或运算符)

两个操作数中只要有一个位数为1,结果就为1,否则为0

例如: 5 | 4

5 -> 101

4 -> 100

	101
^
	100
--------------
	001

^(异或运算)

两个操作数中只要两个位数不相同就为1,否则为0

例如:5^4

	101
^
	100
--------------
	001

~(取反运算)

正数:先将数值转换成二进制,在对二进制数的每一位取反操作包括符号位,在取补码,计算结果

此处以1字节为例

例如:~5

5 转换成二进制:0000 0101

每一位取反:1111 1010

在取补码:1000 0101   ,注意取补码需要 +1

此时:1000 0110

结果为:-6

负数:先将数值转换成二进制,由于负数在计算机是以补码的方式存储,因此取补码,在对每一位取反包括符号位,此时符号为正,在取补码,计算得结果。

例如:~(-5)

-5转换成二进制:1000 0101

由于是负数,计算机以补码的方式存储,此时取补码:1111 1011

在对每一位取反:0000 0100,

在取补码,由于正数的补码是其本身,因此为:0000 0100

结果为:4

取反的简便计算公式:- (a + 1)

<< 左移运算

将数值转换成二进制,整体往左移动若干位,左边超出部分舍弃,右边补零

左移一位相当于乘于2的一次方,左移n位相当于乘于2的n次方(在没有溢出的情况下)

例如: 5 << 1 = 10

           101   左移一位   1010   转换成十进制:10

如果移动超出位数出现溢出,计算结果错误

>>右移运算

将数值转换成二进制,整体往右移动若干位,左边用原有的标志位填充,右边超出的舍弃

右移一位相当于除于2的一次方,右移n位相当于除于2的n次方(在没有溢出的情况下)

例如:4 >> 1 = 2

100  右移一位  10  转换成十进制:2

>>> 无符号右移运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值