Java位运算符

& 按位与

Column 0Column 1Column 2Column 3Column 4
操作数 10011
操作数 20101
操作符&0001

总结:只有同为1,结果才是1;

| 按位或

Column 0Column 1Column 2Column 3Column 4
操作数 10011
操作数 20101
操作符丨0111
总结:只要有一个数字是1,结果为1;

~ 按位非

Column 0Column 1Column2
操作数01
操作符~10

^ 按位异或

Column 0Column 1Column 2Column 3Column 4
操作数 10011
操作数 20101
操作符 ^0110
总结:相同为0,不同为1;

<< 左位移

       Java使用 补 码 来 表 示 二 进 制 数 ,在补 码 表 示 中 ,最高 位 为 符号 位 ,正数 的 符 号 位 为 0,负数 为 1。补 码 的 规 定 如 下 :

       对 正 数 来 说 ,最高位为 0,其余 各 位 代 表 数 值 本 身 (以二 进制 表 示 ),如 10的补码 为 0000 1010。

       对 负 数 而 言 ,把该 数 绝 对 值 的 二进制码 按 位 取 反 ,然后 对 整 个数 加 1,即得 该 数的 补 码 。
比如-10的补码如何获取:

第一步:获取10的二进制码0000 0000 0000 0000 0000 0000 0000 1010
第二步:取反1111 1111 1111 1111 1111 1111 1111 0101
第三步:加11111 1111 1111 1111 1111 1111 1111 0110

为何有那么多0、1?java中int是32位的。
       先介绍一下Java的二进制数,我们再来看看左位移这个运算符号是什么意思?

”>>"表示向左移动:高位溢出,低位补0;(低位添加了多少个0,高位就会溢出多少位)

举个列子:

int num = 2<<3;//向左移3位;10 ->10000;答案应该为16;

再来看看下面这个列子:

Integer num = Integer.MAX_VALUE;
num =num<<1;
答案是:-2;

总结一下:<<(左位移),其实就是在右边加n个0,在最左边(最高位)截取,去掉n位数的高位;保持总数32不变;

在这里插入图片描述

>> 右位移

低位溢出,符号位不变,并用符号位补溢出的高位。
如果是正数,右移后,用0来填充高位;
如果是负数,右移后,用1来填充高位

例子:
正数:右移后,高位用0填充:

在这里插入图片描述

负数:高位用1来填充;
在这里插入图片描述

>>> 无符号右移

低位溢出,高位补0;(所以能从负数能得到正数;)

举例:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值