JAVA位运算总结

关于二进制

关于二进制的概念,网上已经很多,这里不多赘述,只说关键的属性说明和示例。

维基百科

记住,原码是给人看的,补码才是计算机真正使用的。

我们一般所说的二进制是有32位,首位是符号位。0是正数,1是负数。下面我们来根据例子说明二进制与十进制的转换,以及原码补码反码的概念。

  • 二进制转10 进制(32位太长,我们省略我8位方便演示)

    规则:从后往前依次下标为0,1,2..n,如果位是1 则记2的下标次方,有多少个是1的都相加。最后根据符号位标示正负即可。

    • 示例1:0000 0011 的十进制是多少?

    (2的0次方)+(2的1次方)= +3

    • 示例2:1000 0011 的十进制是多少? 补码:1111 1101 -((2的0次方)+(2的1次方))= -3

对于正数来说,原码反码补码都一样。这里主要说的是负数。 以-3为例

  • 原码

1000 0011

  • 反码(原码0->1,1->0,保留符号位)

1111 1100

  • 补码 =反码+1000 00111(逢2进1)

1111 1101

位运算(以补码进行计算)

a=-3,b=2;

位与 & (位同为1,记1,否则记0)

  • 示例 a&b

a补码:1111 1101

b补码:0000 0010

结果: 0000 0000(正数补码反码一样) = 0

位或 | (位只要有1,则记1,否则记0)

  • 示例a|b

a补码:1111 1101

b补码:0000 0010

结果: 1111 1111(补码)

结果反码:1111 1110

结果原码:1000 0001(保留符号位)

结果= -1

位异或 ^ (位不一样则记1,否则记0)

  • 示例 a^b

a补码:1111 1101

b补码:0000 0010

结果: 1111 1111

结果反码:1111 1110(补码-1)

结果原码:1000 0001(保留符号位)

结果 = -1

位取反 ~ (位取反,1>0,0>1)

  • 示例 ~a

a补码:1111 1101

结果: 0000 0010

结果 = 2

左移 << 符号位不变,低位补0 (自右向左低到高)

  • 示例 a<<b

a补码:1111 1101

结果: 1111 0100

结果反码:1111 0011

结果原码:1000 1100(保留符号位)

结果 = -12

右移 >> 低位溢出,符号位不变,并用符号位补溢出的高位

  • 示例 a>>b

a补码:1111 1101

结果: 1111 1111

结果反码:1111 1110

结果原码:1000 0001(保留符号位)

结果 = -1

备注

以上内容在java环境中测试通过。不对之处还望指正。

最后

作者:ricky

交流群: 244930845

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )