后端---java位操作运算符

位运算符

1.处理整型类型时,可以直接对组成整型数值的各个位完成操作.这意味着可以使用掩码技术得到整数中的各个位.位运算符包括:

&("and")                            |("or")                             ^("xor")                           ~("not")

 这些运算符按位模式处理.例如,如果n是一个整数变量,而且用二进制表示的n从右边数第4位为1,则:

int fourthBitFromRight=(n & 0b1000)/0b1000;

会返回1,否则返回0.利用&并结合使用适当的2的幂,可以把其他位掩掉,而且保留其中的某一位.

 

2.>>右移运算符和<<左移运算符

另外,还有>>和<<运算符将位模式左移或右移. 需要建立位模式来完成掩码时,这两个运算符会很方便:

int fourthBitFromRight=(n & (1<<3))>>3;

 

3.>>>无符号左移

 最后,>>>运算符会用0填充高位,这与>>不同,它会用符号位填充高位.不存在<<<运算符.

特别注意的是:移位运算符的右操作符数要完成模32的运算.例如1<<35的值等同于1<<3或8.


在下面我们写几个实例来看一下三种运算符分别能实现的的功能:

System.out.println(17<<4);                       //输出272
System.out.println(17>>4);                       //输出1
System.out.println(-17<<4);			 //输出-272
System.out.println(-17>>4);			 //输出-2
System.out.println(17>>>4);  			 //输出1
System.out.println(-17>>>4);			 //输出268435454

我们先看第一,二行代码分析一下原因:

17在计算机中以0........10001二进制补码形式进行存储,将它向左位移4位后得到0.....100010000(272),将它向右位移4位后得到0.............0001(1).

三四行代码:

-17在计算机中以1..........01111二进制补码形式(负数补码)进行存储,将它向左位移4位后得到1.....011110000仍是二进制补码形式,转换成原码1.......10001000(-272),将它向右位移4位得到1......11110仍是二进制补码形式,转换成原码1....00010(-2).

五六行代码:

17在计算机中以0........10001二进制补码形式进行存储,将它向无符号右移4位后得到0.............0001(1).(由此可知,无符号运算对于正数并没有太大变化,因为正数左移时也用'0'来补位).

-17在计算机中以1..........01111二进制补码形式(负数补码)进行存储,,将它向无符号右移4位得到00001...11110仍是二进制补码形式,但此时计算机已经将他作为正数来处理,所以直接得到结果00001111111111111111111111111110(268435454).

特别注意!!!当所要位移的位数大于32时,要对32取模再进行处理,这里不再过多进行列举.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值