Java中的位运算符

Java位运算符

  • 包括:& 、 | 、 ~ 、 ^ 、 << 、 >> 、 >>> 。
  • & 表示同一位上两个都为1,则结果为1。如“ 1101 & 1001”的结果是“1001”。
    
  • |  表示同一位上两个只要有一个为1,则结果为1。如“ 1101 & 1001”的结果是“1101”。
    
  • ~ 表示取反,如“ ~1101”的结果是“0010”。
    
  • ^ 表示异或,同一位上两个不一样,则该位结果为1,反之为0,如“ 1101 ^ 1001”的结果是“0100”。
    

图1

  • << 表示左移,整体向左移动,即向高位移动,以2的几何级数增长。
  • ‘>>’ 表示左移,整体向右移动,即向低位移动,以2的集合级数下降。
  • '>>>'表示无符号右移,具体见下面.。
    图2

详细说明位运算过程(需要了解补码知识,见本文最后):

<<表示左移移,不分正负数,低位补0;

注:以下数据类型默认为byte-8位

左移时不管正负,低位补0

正数:r = 20 << 2

20的二进制补码:0001 0100

向左移动两位后:0101 0000

结果:r = 80

负数:r = -20 << 2

-20 的二进制原码 :1001 0100

-20 的二进制反码 :1110 1011

-20 的二进制补码 :1110 1100

左移两位后的补码:1011 0000

反码:1010 1111

原码:1101 0000

结果:r = -80

’>>’ 表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

注:以下数据类型默认为byte-8位

正数:r = 20 >> 2

20的二进制补码:0001 0100

向右移动两位后:0000 0101

结果:r = 5

负数:r = -20 >> 2

-20 的二进制原码 :1001 0100

-20 的二进制反码 :1110 1011

-20 的二进制补码 :1110 1100

右移两位后的补码:1111 1011

反码:1111 1010

原码:1000 0101

结果:r = -5

’>>>'表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

正数: r = 20 >>> 2

的结果与 r = 20 >> 2 相同;

负数: r = -20 >>> 2

注:以下数据类型默认为int 32位

-20:源码:10000000 00000000 00000000 00010100

反码:11111111 11111111 11111111 11101011

补码:11111111 11111111 11111111 11101100

右移:00111111 11111111 11111111 11111011

结果:r = 1073741819

补码:
一、计算机中整数如何表示
计算机中用二进制表示数据。
有符号数是由符号位+数字位表示,无符号数是由数字位表示。
有符号数的最高位是符号位,为1表示该二进制数为负数,为0表示该二进制数为正数。
char 2个字节 0~65535 无符号数
short 2个字节 -32767~32766 有符号数

二、原码 反码 补码
原码
作用:计算机中对数字的二进制定点表示方法
表示:正数为原二进制数,负数为绝对值的二进制的最高位(符号位)为1
缺点:1. 计算机中进行正负值运算时,可能出错(1-(-1)=-2)
2. 正负0之分

反码
作用:解决了正负值计算问题
表示:正数反码为原码,负数则是符号位不变,其余都取反(0->1,1->0)
缺点:
正负0之分

补码
作用:解决了正负0问题([+0]补=[+0]反=[+0]原=00000000,[-0]补=11111111+1=00000000。)
利用最高位溢出,将减法运算转为加法运算(a+(-b) = c)
表示:正数的补码为原码,负数为反码末位+1

小结:
计算机中数值一律用补码表示和存储
正数的原码、反码、补码都是相同的(二进制表示)

注意:反码 与 取反 有区别。

三、计算机存储和计算为什么用补码
图3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值