JavaSE(九)

--二进制、位运算、位移运算符

一、二进制简介

现代电子计算机全部采用的是二进制,因为它只使用0,1两个数字符号,简单方便。数字电路中,1代表高电平,2代表低电平。这样,数据的传输通过控制电平的高低就可以了。计算机内部处理信息,都是采用二进制数来表示的。二进制(Binary)数用0和1的两个数字及其组合来表示任何数,进位规则是“逢二进一”,按从右至左的顺序,右低位,左高位。

二、二进制基础

1.所有的二进制数最高位代表符号位,0表示正数,1表示负数。

2.一个字节等于八位

3.正数的原码、反码、补码都一样。

4.一个数的原码就是根据数值和正负号直接写出来的码。

5.取反就是指0变1,1变0。

6.负数的反码=它的原码符号位不变,其他位取反;负数的原码=它的反码符号位不变,其他位取反。

7.负数的补码=它的反码+1;负数的反码=它的补码-1。

8.0的反码,补码都是0

9.Java没有无符号数,换言之,java中的数都是有符号的。

10.在计算机运算的时候,都是以补码的方式来运算的。存储数据也是以补码的方式来存储的

11.二进制与十进制的相互转换:

比如一个二进制数原码是:

0

0

0

0

0

1

0

1

先确定符号位,说明是正数。

再看数值,数值等于1x2^0+0x2^1+1^2^2=5(2^0代表2的0次方)

即每个第i位的数乘以2的i-1次方,再把这些全部加起来,就是10进制的数。

其实不仅二进制是这样算,所有进制的数(包括十进制)都是这么算的,比如78其实就是8x10^0+7x10^1。

十进制转为二进制就更简单了。

比如22,先用二的次方表示出来,即22=16+4+2=1x2^4+0x2^3+1x2^2+1x2^1+0x2^0;

显然,它的二进制表示就是

0

0

0

1

0

1

1

0

三、位运算

Java中有四个位运算,分别是“按位与&”、“按位或|”、“按位异或^”、“按位取反~”,这与逻辑运算符不同:

按位与&:两个全为1,结果为1.

按位或|:两个有一个为1,结果为1.

按位异或^:两个一个为1,一个为0,结果为1.

按位取反~:0变为1,1变为0.

注意:运算的时候均要先根据原码得到补码再进行位运算。

举例:

①~2=?

2的原码00000010,同样反码也是00000010,进行“~”的位运算,即取反,取反之后变成11111101,反码取反之后得到的结果也是反码,说明反码是11111101,显然是负数,负数的补码原码反码可不相等,要根据规律来,所以我们先减一算得反码是11111100,再符号位不变其他位取反算得原码10000011,这显然是-3。所以~2= -3。

②2&3=?

2=

0

0

0

0

0

0

1

0

3=

0

0

0

0

0

0

1

1

根据按位与的运算规则两个全为1结果才为1。那2&3的反码就是

0

0

0

0

0

0

1

0

这显然是正数,那反码原码一样,即原码也是00000010,显然是2.

所以2&3=2。

③2|3=?

同理

2=

0

0

0

0

0

0

1

0

3=

0

0

0

0

0

0

1

1

2|3=

0

0

0

0

0

0

1

1

显然答案是3,即2|3=3。

④~-5=?

-5原码是10000101,反码是11111010,补码是11111011.

算出补码,我们可以开始做按位取反运算了。

取反之后是00000100,这是一个正数,所以原码跟补码相同。

显然,答案就是4,即~-5=4.

⑤-3^3=?

先得出两个数的补码,3的补码显然是00000011。-3原码是10000011,反码是11111100,补码是11111101.

3

0

0

0

0

0

0

1

1

-3

1

1

1

1

1

1

0

1

3^3

1

1

1

1

1

1

1

0

11111110是补码,反码是11111101,原码是10000010.显然是-2。

即-3^3=-2.

⑥1-2=?

在二进制中,1-2会被认为1+(-2)。先算出各自补码,1的补码00000001,-2的原码10000010,-2的反码11111101,-2的补码11111110.

1

0

0

0

0

0

0

0

1

-2

1

1

1

1

1

1

1

0

1+(-2)

1

1

1

1

1

1

1

1

得到一个结果补码是11111111,那反码就是11111110,原码10000001,即-1,所以1-2=-1。

四、移位运算

Java中有三个移位运算:

算术右移”>>”:

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

算术左移”<

所有位的码左移,符号位不变,低位补0.

逻辑右移”>>>”:

所有位的码右移(包括符号位),低位溢出,高位补0.

注意:没有逻辑左移。使用”<<

例子:

①5>>2=?

5的补码为00000101

5

0

0

0

0

0

1

0

1

溢出位

5>>1(右移一位)

0

0

0

0

0

0

1

0

1

5>>2(右移两位)

0

0

0

0

0

0

0

1

0

得到的补码为00000001,显然原码也是00000001,即5>>2=1.

②-1>>2=?

-1的原码10000001,反码11111110,补码11111111

-1

1

1

1

1

1

1

1

1

溢出位

1>>1(右移一位)

1

1

1

1

1

1

1

1

1

1>>2(右移两位)

1

1

1

1

1

1

1

1

1

补码还是11111111,显然结果的补码跟原来一样,结果的原码也跟原来一样,即-1>>2=-1.

③-5<<2=?

-5原码10000101反码11111010补码11111011

-5

1

1

1

1

1

0

1

1

-5<<1(左移一位)

1

1

1

1

0

1

1

0

-5<<2(左移两位)

1

1

1

0

1

1

0

0

结果为补码为11101100,反码为11101011,原码为10010100,即-5<<2=-20

④127>>>2

127的补码01111111

127

0

1

1

1

1

1

1

1

127>>>1(右移一位)

0

0

1

1

1

1

1

1

127>>>2(右移两位)

0

0

0

1

1

1

1

1

显然127>>>2=31.

五、

在java中,如何最快判断一个数是不是2^的n次方呢?如何让一个数最快的变成它的两倍呢?

都是进行位运算,位运算是直接在内存中进行的,是最快的。

1.

public static boolean isPowerOfTow(int val){

return (val&-val)==val;

}

2.

原文:http://www.cnblogs.com/myz666/p/7489332.html

java 二进制右移位_(九)二进制、位运算、位移运算符相关推荐

  1. c位边上还有什么位_站c位是什么位置?众女星合影惠英红C位童瑶站边角,惠英红为何能站C位?...

    广告 丁真跨年夜宣传海报居C位.网友问:他凭什么? 今年可谓是四川理塘小伙丁人生巅峰.因为他一张纯真的笑容,而迅速火遍全网.从一开始他露面的时候就吸粉无数.以前啊,觉得别人说靠脸吃饭那是开玩笑,但是丁 ...

  2. git 32位_编译64位的BorderlessGaming

    BorderlessGaming确实是一款很好用的工具,我主要用来把AS的模拟器全屏,来把Surface当安卓平板用,但是这东西的官方Release和Steam版本都是32位的,不过好在它开源,那就自 ...

  3. c位边上还有什么位_拍照c位是什么意思 看这些明星站的位置就知道有多重要

    拍照c位是什么意思?在拍大合照的时候,我们常常会说到c位这个词,但是很多人并不知道到底是什么意思,今天就让我们一起来了解一下吧.其实看大型活动的时候,这些明星站的位置就知道有多重要了.尤其是芭莎慈善夜 ...

  4. java中右移_Java中的按位右移运算符

    Java支持两种类型的右移运算符.>>运算符是有符号的右移运算符,而>>>是无符号的右移运算符.左操作数的值向右移动右操作数指定的位数. 签名右移运算符 带符号的右移运算 ...

  5. java如何实现信号量_使用二进制信号量实现通用信号量

    看到你的问题图像后,输入信号量的目的是只允许单个进程/线程等待锁定,如果你不使用它,其他进程将进入等待队列 . why we need the entry semaphore 条目信号量未使用任何值初 ...

  6. 进制转换二进制转八进制_将二进制数制转换为八进制数制

    进制转换二进制转八进制 Prerequisite: Number systems 先决条件: 数字系统 To convert binary numbers into octal numbers, we ...

  7. c位边上还有什么位_会议桌C位,是它!

    俗话说: "开会开得好,下班回家早". 作为一个职场人, 我们不是在开会,就是在开会的路上. 大小会议,不计其数. 如何在会议上保持最好的状态? 轻松高效解决会议问题? 一杯茶妈妈 ...

  8. 苹果6访问限制密码4位_破解6位密码只需4秒!3步设置密码挡住黑客

    你的密码安全至关重要 首先要知道的是,破解密码有两种方法,第一种是暴力破解,也就是挨个密码去尝试,直到试对为止.暴力破解的很明显问题是,密码越长,破解密码的时间就会成倍增加,一旦密码超过了某个长度,基 ...

  9. 苹果6访问限制密码4位_破解6位密码只需4秒!教你3步设置强密码挡住黑客

    我们每天离不开的账户和密码可是关系到信息和资金安全的保障,但是太简单的密码容易被盗,太难的密码又容易忘,难道真要拿个小本本记下来?别慌,你的密码需要3步守护,且看我们的密码设置秘籍. 首先要知道的是, ...

  10. 平行空间怎么设置32位_小机箱硬盘位不够怎么办 这个空间一定要用起来

    点击上方电脑爱好者关注我们 很多小伙伴都非常喜欢小机箱,"小钢炮"这个名字听着就爽.不过小机箱有个很麻烦的问题就是空间不足,特别是硬盘位置,只能装一两块的是闹哪样啊!别急,静下心来 ...

最新文章

  1. 创建指向以下位置中的matlab脚本的符号链接_【分享吧】浅析软链接与硬链接
  2. linux软件升级直接替换,Linux几个命令的升级替代品
  3. 深入探讨!Batch 大小对训练的影响
  4. pom项目install报错没有自己_SAP财务凭证报错:没有项目种类分配到科目
  5. ASP.NET Core整合Zipkin链路跟踪
  6. 每个女孩子起床后做的第一件事......
  7. 计算机网络(二十四)-路由算法及路由协议
  8. Hbase1.2数据导入2.0
  9. 程序员的自我救赎---4.2:消息中心讲解与应用
  10. 纽氏达特旗下智能机器人_专业工业机器人增程方案提供商纽氏达
  11. 手机视频监控系统小结
  12. Linux服务器配置Redis并启用PHP支持
  13. 网络传输介质和常见的设备
  14. 绿米Aqara、飞利浦等设备,如何与智汀使用同一个APP实现跨品牌互联?
  15. PHP字符串函数strlen(获取字符串长度)
  16. NVIDIA JETSON XAVIER NX TX2 NANO 比较及与显卡算力对比
  17. oracle 输出全角空格,mac系统中如何切换全角半角?苹果电脑输入法全角半角切换快捷键介绍...
  18. Android 第三方QQ分享功能实现
  19. 游戏辅助制作核心--植物大战僵尸逆向之阳光修改(一)
  20. 中文分词jieba python 学习

热门文章

  1. CSS实现限制字数功能
  2. Linux上修改open files数目
  3. 比对字段判断字段是否为空,合并列字段(合并多列)
  4. C# dataGridView中的数据导出到excel
  5. go处理get、post请求返回的body数据
  6. python三引号的作用_Python学习笔记(三)基本数据类型
  7. 祝贺泰山JDK8开源
  8. 使用VC做一个简单的UI界面对话框
  9. 喜庆:上周阅读量5W,超过了99%的C友
  10. VirtualBox启动虚拟机出错VT-x disable