韩顺平 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次方?移位运算
  • 如果用最快的方法将一个数变成原来的二倍?移位运算
版权声明:本文为博主原创文章,未经博主允许不得转载。

JavaMail发送邮件(韩顺平)

主程序:package Model;public class SendMailToSomeone { public static void main(String []args){ SendMa...
  • lishirong
  • lishirong
  • 2014年12月02日 09:47
  • 2265

韩顺平.循序渐进学.java.从入门到精通迅雷资源下载地址

韩顺平.循序渐进学.java.从入门到精通视频资源
  • qq_19636353
  • qq_19636353
  • 2016年07月09日 08:31
  • 2124

(转)韩顺平j2ee学习笔记与心得

Java EE概念:Java EE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(java EE就是十三种技术的总称)。建立一个整全的概念。要成为一个java EE程序员,必须掌握的技术是...
  • lishirong
  • lishirong
  • 2014年12月02日 09:47
  • 2293

(韩顺平讲解)jdbc学习(四)---java连接mysql

java 连接 mysql   编写一个程序,这个程序从student表中读取数据,并打印在命令行窗口中。 一、搭建实验环境 : 1、在mysql中创建一个库,并创建student表和插入表的数据。 ...
  • u012301841
  • u012301841
  • 2014年08月09日 13:22
  • 806

传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)

传智播客.韩顺平.轻松搞定网页设计(html.css.javascript)http://www.kesjc.com/bbs/forum-66-1.html 第00讲.开山篇 第01讲.html介...
  • cgnine
  • cgnine
  • 2014年07月01日 18:08
  • 1336

韩顺平循序渐进学JAVA从入门到精通 视频全套,需要的联系我

Java线程池使用说明 一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后...
  • MrCharles
  • MrCharles
  • 2015年05月04日 18:57
  • 1608

韩顺平2011细说Servlet笔记1

韩顺平2011细说Servlet笔记1 2012-06-16 18:18 1278人阅读 评论(0) 收藏 举报 servlettomcat浏览器web服务stringweb u...
  • p656456564545
  • p656456564545
  • 2013年11月03日 10:54
  • 1931

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

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

韩顺平java 第32讲 swing编程实战

拆分窗格 JSplitPane和多行文本框组件JTextAreaJSplitPane属于容器类组件。package chen.com; import java.awt.*; import javax....
  • chenguibao
  • chenguibao
  • 2015年10月09日 21:57
  • 394

韩顺平jsp学习笔记

jsp u  j2ee核心13种技术: 程序员必须掌握的技术:java,servlet,jsp。 13种技术规范. u  j2ee程序员修炼成精法门 u  jsp 版本的用户管理系统:将se...
  • aminxu
  • aminxu
  • 2013年12月09日 16:19
  • 2608
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:韩顺平 java 第二十讲 二进制、位运算、移位运算符
举报原因:
原因补充:

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