`
zhouchaofei2010
  • 浏览: 1104038 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java二进制.位运算.位移运算

    博客分类:
  • java
阅读更多

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

思考题

1、请看下面的代码段,回答a,b,c,d,e结果是多少?

public static void main(String []args){

int a=1>>2;

int b=-1>>2;

int c=1<<2;

int d=-1<<2;

int e=3>>>2;

//a,b,c,d,e结果是多少

System.out.println("a="+a);//a=0

System.out.println("b="+b);//b=-1

System.out.println("c="+c);//c=4

System.out.println("d="+d);//d=-4

System.out.println("e="+e);//e=0

}

注:">>"代表算术右移,"<<"代表算术左移,">>>"代表逻辑右移

 

2、请回答在java中,下面的表达式运算的结果是:

~2=?//-3

2&3=?   //2

2|3=?   //3

~-5=?   //4

13&7=?  //5

5|4=?   //5

-3^3=?  //-2

注:"~"代表位取反,"&"代表位与,"|"代表位或,"^"代表位异或

 

二进制--基本概念

二进制是逢2进位的进位制,0、1是基本算符。

    现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是“逢2进1”,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

注:1个字节=8位bit,

bit最高位是符号位如:■□□□□□□□黑色方框为符号位。

符号位0代表正数,1代表负数

 

二进制--原码、反码、补码

对于有符号的而言:

1、二进制的最高位是符号位:0表示正数,1表示负数

2、正数的原码、反码、补码都一样

3、负数的反码=它的原码符号位不变,其它位取反

4、负数的补码=它的反码+1

5、0的反码,补码都是0

6、java没有无符号数,换言之,java中的数都是有符号的

7、在计算机运算的时候,都是以补码的方式来运算的。

 

位运算符和移位运算

java中有4个位运算,分别是“按位与&、按位或|、按位异或^,按位取反~”,它们的运算规则是:

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

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

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

按位取反:0->1,1->0

 

java中有3个移位运算符:

>>、<<算术右移和算术左移,运算规则:

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

算术左移:符号位不变,低位补0

>>>逻辑右移,运算规则是:低们溢出,高位补0

 

 

计算过程举例

注意:计算机运算的时候,都是以补码的方式来运算的,如果补码计算结果负数,则需要把补码转为原码

1>>2

1的原码
00000000 00000000 00000000 00000001
因为正数的原码、反码、补码都一样
所以1的补码
00000000 00000000 00000000 00000001
算数右移2位结果
00000000 00000000 00000000 00000000
所以1>>2=0 
推导出1>>n(n>1的正整数) 结果都为0
 
-1>>2
-1的原码
10000000 00000000 00000000 00000001
-1的反码
11111111 11111111 11111111 11111110
-1的补码
11111111 11111111 11111111 11111111
算数右移2位结果
11111111 11111111 11111111 11111111
补码->反码 :-1
11111111 11111111 11111111 11111110
反码->原码
10000000 00000000 00000000 00000001
所以-1>>2=-1

推导出-1>>n(n>1的正整数) 结果都为-1

 

3>>>2

3的原码

00000000 00000000 00000000 00000011

因为正数的原码、反码、补码都一样

所以3的补码

00000000 00000000 00000000 00000011

 

>>>逻辑右移2位结果为

00000000 00000000 00000000 00000000
所以3>>>2=0
 
~2
2的原码补码相同
2的补码
00000000 00000000 00000000 00000010
 

按位取反~

11111111 11111111 11111111 11111101
因为第1为是1,为负数,所以要-1,其它位取反得原码结果
-1
11111111 11111111 11111111 11111100
其它位取反
10000000 00000000 00000000 00000011
所以结果为-3
 
 
内容来源于韩顺平对二进制.位运算.位移运算讲解的视频
 
视频地址:
韩顺平.循序渐进学.java.从入门到精通.第20讲-二进制.位运算.位移运算.avi

韩顺平.循序渐进学.java.从入门到精通.第21讲-集合.avi

 http://v.youku.com/v_show/id_XMjE0NTkwMTY0.html?f=5226664&from=y1.2-3.4.24  

 
 


 

 

 

 

 

 

1
2
分享到:
评论

相关推荐

    【循序渐进学.java】从入门到精通.第20讲-二进制.位运算.位移运算.zip

    绝对韩顺平老师的讲解视频!教学文件打包太大,就一个一个的上传了! avi格式的,最好用KMPlayer来播放,下载地址:https://www.kmplayer.com/home 后续还上传,韩顺平老师教学的源代码!

    大数运算包含加,减,乘,除,取模,幂运算,模幂运算。支持十进制运算,二进制运算.zip

    支持十进制运算,二进制运算.zip"文件中,我们可以预见到这可能是一个关于大数运算的程序或库,它不仅支持常见的十进制运算,还特别强调了二进制运算。 1. **大数运算**:大数运算通常在需要精确计算或处理大数据量...

    二进制与逻辑运算 超星书籍

    在二进制中,每个位(bit)代表一个幂次的2,例如,二进制数1011代表\(2^3 + 2^1 + 2^0 = 8 + 2 + 1 = 11\)。这种表示方法使得电子设备能更容易地处理和存储数据,因为电路中的开和关状态可以对应于二进制的0和1。 ...

    Windows关于整数二进制位移运算的MFC程序源代码

    在编程领域,特别是C语言和其派生的MFC(Microsoft Foundation Classes)框架中,整数的二进制位移运算是一种重要的算术操作。位移运算符在处理位模式、数据存储、位掩码以及优化计算等方面发挥着关键作用。本程序源...

    网页版科学计算器 二进制计算器 在线十六进制计算器.zip

    4. 左移、右移操作,模拟位移运算。 在线十六进制计算器则专注于十六进制数的运算,十六进制是一种常用的计算机表示方式,常用于内存地址和颜色代码等领域。用户可以执行以下操作: 1. 十六进制加法、减法、乘法和...

    JAVA位运算.pdf

    ### JAVA位运算详解 在Java编程中,位运算是一门精细的艺术,涉及到对整数类型的二进制位进行直接操作。这些操作不仅能够优化代码执行效率,还常用于实现特定的算法需求。本文将深入探讨Java中的位运算,包括位...

    二进制数运算.zip

    在实际编程中,理解这些二进制运算对于低级编程,如操作系统开发、硬件驱动编写或嵌入式系统设计至关重要。熟练掌握二进制数运算不仅能提高编程效率,还能帮助开发者更好地理解和解决计算机底层的问题。

    蓝桥杯c++-蓝桥杯竞赛练习之基础练习题十六进制转十进制.zip

    这种方法适合理解二进制和位运算,但实际编程中较少使用。 4. **循环处理**: - 通过遍历十六进制字符串的每个字符,计算其对应的十进制值并累加。每个字符可以通过查表或者`std::isdigit`和`std::isxdigit`函数来...

    二进制计算.docx

    7. **二进制位移运算**:位左移(`)和位右移(`&gt;&gt;`)运算符,常用于快速乘除以2的幂。例如,`10 等于`1000`,相当于`10 * 2^2`。 8. **二进制在计算机中的应用**:二进制数不仅用于数值计算,还用于存储数据(如...

    CE二进制运算器正式版

    作为一个专业的IT工具,它允许用户执行包括加法、减法、乘法、除法以及位移、按位与、按位或、按位异或等在内的各种二进制运算。这些运算对于理解和处理二进制数据至关重要,尤其在计算机科学、编程、硬件设计等领域...

    整数型到二进制文本.rar

    - **位运算**:在编程中,可以使用位移操作(左移`和右移`&gt;&gt;`)以及按位与`&`、按位异或`^`等运算符来实现整数到二进制的转换。 3. **编程语言中的转换函数**: - 在Python中,可以使用内置函数`bin()`,如`bin...

    二进制的基础上的位运算

    ### 二进制基础上的位运算详解 #### 一、位运算概述 位运算是一种直接在二进制层面上操作数据的运算方式。相比于普通的算术运算,位运算执行效率更高,广泛应用于网络编程、硬件控制等场景。本文将详细介绍五种...

    进制转换和逻辑运算器_绿色汉化版

    3. 位运算支持:对二进制数进行位移、按位与、按位或、按位非、按位异或等操作。 4. 布尔逻辑运算:用户可以输入布尔表达式,程序会计算并显示结果。 5. 教学模式:提供相关知识介绍和实例,帮助用户理解概念。 总...

    二进制多字节定点数运算

    二进制乘法可以分解为一系列的位移和加法,每一步都将一个操作数左移一位,然后与另一个操作数相乘,最后累加结果。二进制除法则涉及反复的位移和比较,直到被除数小于除数为止。 在进行二进制定点数运算时,还需要...

    计算机基础二进制教案

    7. **二进制在编程中的应用**:通过实例展示如何在编程语言中使用二进制运算符进行位操作,比如位移、位掩码等。 8. **实践活动**:设计一些实验或项目,让学生通过实际操作理解二进制,如制作二进制计数器、模拟...

    c# 二进制与十进制的转换

    例如,二进制到十进制可以使用位移和加法,十进制到二进制则可以使用除以2和模运算。这些方法对于理解底层机制非常有帮助,但通常在实际编程中,直接使用内置的转换函数更为简便和高效。 总之,理解和掌握二进制与...

    行业文档-设计装置-计算机二进制教学工具.zip

    7. **二进制在计算机程序中的作用**:讨论编程语言中的二进制数据类型,以及如何在代码中进行二进制运算。 8. **二进制在网络通信中的角色**:讲解网络传输的数据如何以二进制形式进行编码和解码。 9. **二进制在...

    穷举n位二进制数.rar_穷举问题_算法设计与分析

    - 每次循环中,使用模运算和除2操作获取当前位的二进制值,然后逆序存储,因为二进制转换通常从低位到高位,而我们需要的是高位到低位的顺序。 - 输出当前的二进制数。 无论哪种方法,都需要处理好边界条件,确保...

    二进制计算器(收藏)

    除了基本的转换,二进制计算器可能还支持其他高级功能,如位运算(如AND、OR、NOT、XOR)、二进制位移(左移和右移)、进制数的加减乘除等。位运算在计算机编程中广泛用于逻辑判断和数据处理,位移操作则常用于快速...

    Java学习随笔7(进制).docx

    Java中的位运算,如与(&),或(|),异或(^),左移(),右移(&gt;&gt;)和无符号右移(&gt;&gt;&gt;), 是在二进制层面操作数字的重要手段。例如,`&`操作符可以用来做掩码操作,检查或设置二进制位;`|`用于合并位,`^`用于翻转指定位,...

Global site tag (gtag.js) - Google Analytics