原 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环境中测试通过。不对之处还望指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Pulsar-V

Save Camera Document

#pragma once #include "HCCamera.h" #include <time.h> #include <cstdio> #incl...

2828
来自专栏码匠的流水账

java9系列(五)Stack-Walking API

java9新增这个类的目的是提供一个标准API用于访问当前线程栈,之前只有Throwable::getStackTrace、Thread::getStackTr...

421
来自专栏Ryan Miao

ehcache报错

jfinal2.0+tomcat7+ehcache2.6.11+Linux Linux version 2.6.18-164.el5 (mockbuild@x8...

3729
来自专栏WOLFRAM

向日葵中的数学之美

1843
来自专栏跟着阿笨一起玩NET

c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理

------解决方案-------------------------------------------------------- 开始的时候,禁用定时器,你...

2691
来自专栏Golang语言社区

Knapsack problem algorithms for my real-life carry-on knapsack

I'm a nomad and live out of one carry-on bag. This means that the total weight o...

1142
来自专栏linux驱动个人学习

高通msm8909耳机调试

1、DTS相应修改: DTS相关代码:kernel/arch/arm/boot/dts/qcom/msm8909-qrd-skuc.dtsi: 1 s...

7575
来自专栏余生开发

echarts太阳分布图-饼图来回穿梭

var dom = document.getElementById("container");

1202
来自专栏专知

2018年SCI期刊最新影响因子排行,最高244,人工智能TPAMI9.455

2018年6月26日,最新的SCI影响因子正式发布,涵盖1万2千篇期刊。CA-Cancer J Clin 依然拔得头筹,其影响因子今年再创新高,达244.585...

1282
来自专栏Hadoop数据仓库

Oracle sqlldr 如何导入一个日期列

1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCO...

1806

扫码关注云+社区