java各种运算符

本文详细解析了Java中的位运算,包括或运算符(|)、与运算符(&)、异或运算(^)、非运算符(~)以及位移运算(<<和>>>)。通过实例展示了这些运算符如何作用于二进制数,并解释了正负数在位运算中的处理方式。
摘要由CSDN通过智能技术生成

或运算符(|)

有1则为1

-2|-6

10000000 00000000 00000000 00000010  -反码-11111111 11111111 11111111 11111101 --进行补码: 11111111 11111111 11111111 11111110

10000000 00000000 00000000 00000110  -反码-11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
11111111 11111111 11111111 11111110 | 11111111 11111111 11111111 11111010

= 11111111 11111111 11111111 11111110 --补码(-1-11111111 11111111 11111111 11111101  --反码-10000000 00000000 00000000 00000010 
= 2

与运算符(&)

有0则为0

2&-6

00000000 00000000 00000000 00000010 (原反补相同)

10000000 00000000 00000000 00000110  -反码-11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
00000000 00000000 00000000 00000010
&
11111111 11111111 11111111 11111010

= 00000000 00000000 00000000 00000010 (因为是第一位是0是正数,正数原反补相同) = 2

-2&-6

10000000 00000000 00000000 00000010  -反码-11111111 11111111 11111111 11111101 --进行补码: 11111111 11111111 11111111 11111110
&
10000000 00000000 00000000 00000110  -反码-11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
11111111 11111111 11111111 11111110
&
11111111 11111111 11111111 11111010

= 11111111 11111111 11111111 11111010 --补码(-1-11111111 11111111 11111111 11111001  --反码(-1-00000000 00000000 00000000 00000110 
= 6

位移运算

-2 << 1:

10000000 00000000 00000000 00000010-2) ——反码-—》 11111111 11111111  11111111  11111101  --补码--11111111 11111111  11111111  11111110 
--左移1-11111111 11111111  11111111  11111100    -补码(-1-11111111 11111111  11111111  11111011  -反码(不改变符号位)-10000000 00000000  00000000  00000100  
= -4

-2 >>> 1:

10000000 00000000 00000000 00000010-2) ——反码()-—》11111111 11111111  11111111  11111101 --补码--11111111 11111111  11111111  11111110 
--右移1-01111111 11111111  11111111  11111111  右移后变成了正数(第一个数是0),正数的原码,反码,补码都相同
=01111111 11111111  11111111  11111111
=2147483647

异或运算

相同为0,相异为1

-2^-6 :

10000000 00000000 00000000 00000010  -反码-11111111 11111111 11111111 11111101 --进行补码: 11111111 11111111 11111111 11111110
^
10000000 00000000 00000000 00000110  -反码-11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
11111111 11111111 11111111 11111110 ^ 11111111 11111111 11111111 11111010
= 00000000 00000000 00000000 00000100
= 4

非运算符

1变0,0变1

~-2 :

10000000 00000000 00000000 00000010  -反码-11111111 11111111 11111111 11111101 --进行补码(+1): 11111111 11111111 11111111 11111110

~运算后: 00000000 00000000 00000000 00000001 (正数原反补相同)
=1

~2 :

00000000 00000000 00000000 00000010 

~运算后: 11111111 11111111  11111111  11111101 --进行补码(-1): 11111111 11111111  11111111  11111100  -反码-10000000 00000000  00000000  00000011
=-3

总结:反码和补码是不改变正负标记位的,运算改变正负标记位的

结语

文章有不对的地方欢迎指出,共同进步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值