7位运算符简单讲解

符号

& :按位与
| :按位或
~ :按位非
^ :按位异或
<< :左位移运算符
>>:右位移运算符
>>>:无符号右移运算符

例子

  1. 5 & 9 5 | 9
    00000101 00000101
    & 00001001 | 00001001
    —————— ——————
    00000001 00001101
    5 & 9 的结果是1 5 | 9 的结果是13
2.原码是负数 负数-》补码-》取反 按位非值
-5
-5 的二进制 10000101
取反 11111010
+1 即补码 1111011
补码取反 0000100 这是内存中的保存形式
即 4
所以 ~-5=4
原码是正数 取反 取反以后是负数 =》求补码 非值(负数补码的补码是原码)
~5
5的二进制是00000101
按位取反 11111010 这是内存中的保存形式,(在内存中,数值都是以二进制补码形式保存)
取反 10000101
+1 即补码 10000110
即 -6
3.5^9 =13
00000101
^ 00001001
——————
00001100
4.左移 将一个运算对象的各二进制位全部左移若干位(左边的二进制丢弃,右边补0)
正数左移
11<<2 =44
11: 00001011 左移两位 即 00101100 即44
负数左移
-14<<2=-56
-14 的补码(内存中存的是补码) 11110010 左移 两位 11001000 即 -56
5.右移 >> 将一个运算对象的各二进制位全部右移若干位,正数左补0,负数左补1.
4 >> 2 = 1; 0000 0100 =>0000 0001
-14 >> 2 = -4; 1111 0010(-14的补码) =》1111 1100
1111 1100的补码是1000100 即-4
6.无符号右移>>>
正数无符号右移高位补0 (对正数进行若干次无符号右移,得到的永远都是正数或0)
负数无符号右移 高位补0(java中是32位)
11111111 11111111 11111111 11110000 (-16的补码)右移两位高位补零:00111111 11111111 11111111 11111100 --这个二进制对应的值就是1073741820

在java语言中,为了保证移动位数的有效性,以使右移位数不超过32位,采用了取余的操作,即
a >>n 等价于 a >> (n%32)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值