韩顺平 java 第二十讲 二进制、位运算、移位运算符

原创 2015年09月26日 17:19:32

计算机二进制中的原码、补码、反码

计算机内部处理的信息都是采用二进制数来表示。进位规则是“逢二进一”
int a = 1;
int类型是4个字节,一个字节等于八个bit。所以一共32bit。


重点内容

  • 二进制的最高位是符号位,0代表正数,1代表负数
  • 正数的原码补码反码都一样
  • 负数的反码=它的原码符号位不变其他位取反
  • 负数的补码=它的反码+1
  • 0 的反码、补码都是0
  • java没有无符号数,也就是说java中的数都是有符号的
  • 在计算机计算的时候,都是以补码的方式来运算的

例子:模拟计算机计算1-2的过程

相当于:1+(-2)
1的补码:0000……0001
-2的原码:1000……0010
-2的反码:1111……1101
-2的补码:1111……1110
所以:1和-2的补码相加:
得到:1111……1111
结果是补码。结果如果是正数的话,原码就是结果;但这个结果是负数,所以还要装换成原码:
结果的补码:1111……1111
结果的反码:1111……1110
结果的原码:1000……0001
也就是-1!

位运算符和移位运算符

  • 这些操作都是准对补码来说的,操作之前都要转换成补码
  • 4个位运算,分别是:按位与&、按位或|、按位异或^、按位取反~;这几个运算都是针对补码来运行的。
  • 3个移位运算:算数左移<<(低位溢出,符号位不变,并用符号位补溢出的高位);算数右移>>(符号位不变,低位补零);逻辑右移>>>(低位溢出,高位补零)

求下列输出结果:

int a = 1>>2;
//结果:0
//1的补码:0000……0001
//右移两位:0000……0000(符号位为0)
int b = -1>>2;
//结果:-1
//-1的原码:1000……0001
//-1的反码:1111……1110
//-1的补码:1111……1111
//所以-1右移多少位都是-1
int c = 1<<2;
//结果:4
//相当于乘以二
int d = -1<<2;
//结果:-4
//-1的补码:1111……1111
//左移2位:1111……1100
//结果的反码:1111……1011
//结果的原码:1000……0100
//也就是-4
int e = 3>>>2;
//结果:0
//3的补码:0000……0011
//逻辑右移3位:0000……0000
int a = ~2
//结果是:-3;过程如下:
//2的补码是:0000……0010
//取反之后是:1111……1101
//很明显这个是负数的补码,要转换成原码:
//结果的反码是:1111……1100
//结果的原码是:1000……0011
//也就是-3
int c = 2&3
//两个都是正数
//2的补码:0000……0010
//3的补码:0000……0011
//&之后:  0000……0010
//这个也是结果的原码,就是2
int d = 2|3
//这个同上个,结果是:3
int e = ~-5
//-5原码:1000……0101
//-5反码:1111……1010
//-5补码:1111……1011
//取反:   0000……0100
//是正数,所以结果是:4
int f = -3^3
//-3 的原码:1000……0011
//-3反码:1111……1100
//-3补码:1111……1101
//3补码:0000……0011
//然后二者异或:1111……1110(补码,负数:还需要转换成原码)
//结果的反码:1111……1101
//结果的原码:1000……0010
//也就是:-2
  • 如何用最快的方法判断一个数是2的n次方?移位运算
  • 如果用最快的方法将一个数变成原来的二倍?移位运算
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenguibao/article/details/48752605

纹理滤波方式、光源:Jeff Molofee(NeHe) 的 OPENGL 教程-第七课

 Jeff Molofee
  • cker
  • cker
  • 2001-09-09 01:55:00
  • 2242

韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全).docx

  • 2014年11月04日 19:35
  • 1.52MB
  • 下载

JAVA学习 孙鑫 张孝祥 韩顺平 马士兵?哪个老师讲的更好些

本文转自: 如:尚学堂J2SE是最好的,而JSP则MLDN的最好,至于servlet,则数韩顺平老师录制的了!关于框架,struts尚学堂讲得很不错,传智的还行,但过于理论化,不建议初学者, hib...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2013-07-13 12:50:52
  • 5189

韩顺平 java 第25讲、第26讲 泛型

泛型 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 在没有泛型的情况下,通过对类型Object的引...
  • chenguibao
  • chenguibao
  • 2015-09-29 10:54:28
  • 547

韩顺平java笔记完整版(配套95讲视频的码源)

  • 2018年03月03日 22:22
  • 10.45MB
  • 下载

韩顺平 java从入门到精通 PPT

  • 2012年03月04日 21:00
  • 9.39MB
  • 下载

韩顺平java 第14讲第15讲 作业评讲

韩顺平java 第14讲第15讲 作业评讲1. switch(4){ default: System.out.println("0"); ...
  • chenguibao
  • chenguibao
  • 2015-09-22 19:13:48
  • 249

韩顺平.循序渐进学.java.从入门到精通,下载链接

  • 2017年09月12日 21:00
  • 49B
  • 下载

韩顺平呕心沥血Java+PHP+linux+div+css等视频下载地址

这是我在淘宝上淘到的 ,拿来和大家共享一下!想好好学习IT的人一定不能错过!! 韩顺平全套教程下载地址,PHP,JAVA,终生可下载 传智播客_韩顺平ajax技术教程 http://dl.dba...
  • ItJavawfc
  • ItJavawfc
  • 2014-07-22 19:53:21
  • 6447

韩顺平轻松搞定网页设计全集(54讲-全)

  • 2016年09月21日 14:56
  • 35KB
  • 下载
收藏助手
不良信息举报
您举报文章:韩顺平 java 第二十讲 二进制、位运算、移位运算符
举报原因:
原因补充:

(最多只允许输入30个字)