java入门到转行之位运算详解

位运算分类

位运算符分类格式作用
按位异或^两位相同时返回0,不同返回1
按位与&两位同时为1时返回1
按位或|两位只要有一位为1,返回1
按位非~将操作数的二进制的补码的每个位包括符号位全部取反(单目运算符)
左移运算符<<将操作数的二进制补码左移指定位数,右边空出以0填充
右移运算符>>将操作数的二进制补码右移指定位数,左边空出以符号位填充(正数是0,负数是1)
无符号右移运算符>>>将操作数的二进制补码右移指定位数,左边空出都以0填充(结果都为正数)

Tips: 1、位是说参与运算的操作数的二进制的补码

​ 2、源码是整数转换为二进制,反码是将源码的每位取反(符号位不变),补码是在反码的基础上加1(符 号位不变)。

​ 3、正数的源码,反码,补码都一样

具体运算

^按位异或

3^5
3的补码为:00000011
5的补码为:00000101
结果为:     00000110
转换为十进制是:6

&按位与

3&5
3的补码为:00000011
5的补码为:00000101
结果为:     00000001
转换为十进制是:1

|按位或

3|5
3的补码为:00000011
5的补码为:00000101
结果为:     00000111
转换为十进制是:7

~按位非

~-3
-3的源码:10000011
-3的反码:11111100
-3的补码:11111101
取反:    00000010
转换为十进制为2

左移运算符<<

-3<<2
-3的源码:10000011
-3的反码:11111100
-3的补码:11111101
将-3的补码左移2位,前面位数不要,后面空出位数0填充
11110100
将补码转换为源码
补码->反码:补码-1
11110011
反码->源码:取反
10001100
转换为十进制:-12

右移运算符>>

-3>>2
-3的源码:10000011
-3的反码:11111100
-3的补码:11111101
将-3的补码右移2位,后面位数不要,前面空出位数1填充
11111111
将补码转换为源码
补码->反码:补码-1
11111110
反码->源码:取反
10000001
转换为十进制:-1

无符号右移运算符>>>

-3>>>2
-3的源码:10000011
-3的反码:11111100
-3的补码:11111101
将-3的补码右移2位,后面位数不要,前面空出位数0填充
00111111
将补码转换为源码
补码->反码:补码-1
00111110
反码->源码:取反
01000001
转换为十进制:65

注意事项

1、 对于低于int类型的操作数总是先自动类型转换为int类型后再移位

2、 对于int类型的整数移位时,如果所移位数大于32,则系统会对32取余,得到的结果才是真正移位的位数,因为int类型只有32位。同理long类型时,所移位数大于64时,进行同样操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值