`

二进制、位运算、位移运算(转)

 
阅读更多

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

思考题

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
 
分享到:
评论

相关推荐

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

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

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

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

    CE二进制运算器正式版

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

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

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

    二进制数运算.zip

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

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

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

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

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

    linux下int转二进制字符串的方法_int转二进制字符串的方法_QT_linux_

    一个简单的思路是利用位移操作符(`和`&gt;&gt;`)以及与操作符(`&`)来检查每个二进制位。以下是一个基本的示例: ```cpp #include #include std::string intToBinaryString(int num) { std::string binaryString; ...

    汇编语言 二进制数和十进制数相互转换

    首先,我们要理解二进制数系统,它是计算机内部运算的基础。二进制数由0和1组成,每一位代表2的幂次。例如,二进制数1011表示1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 0 + 2 + 1 = 11,即十进制中的11。 转换二进制到...

    二进制转10进制

    在计算机科学中,二进制转换不仅用于简单的数值表示,还涉及到更复杂的运算,如逻辑运算(AND, OR, NOT, XOR)、位移操作(左移、右移)以及数据存储和传输。了解这些基本转换对编程和硬件设计至关重要。 标签“二...

    二进制计算器(收藏)

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

    单片机程序之二进制转换

    这些操作在处理二进制数据时非常有用,例如,位移可以快速乘除以2的幂次,按位操作可以进行布尔逻辑运算。 在提供的压缩包文件中,可能包含了演示这些转换的源代码示例。通过分析和运行这些代码,初学者可以更直观...

    二进制的基础上的位运算

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

    位运算15个完整优秀实例 计算机系统2

    位运算是指对数字的二进制形式进行按位与(AND)、按位或(OR)、按位异或(XOR)、按位取反(NOT)以及移位操作的运算。它在计算机系统中具有非常广泛的应用,尤其是在系统底层操作和优化中显得尤为重要。 #### ...

    IEEE 745标准的32位二进制浮点数与十进制浮点数转换代码C#

    IEEE 745标准,也称为IEEE 754-1985,是国际电工委员会(IEEE)制定的一套关于浮点数运算的标准,它定义了如何用二进制表示单精度(32位)和双精度(64位)浮点数。 在32位的IEEE 745标准中,一个浮点数被分为三个...

    二进制多字节定点数运算

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

    汇编程序 二进制转十六进制

    标题“汇编程序 二进制转十六进制”明确了程序的主要功能,即在汇编语言环境下将二进制数值转换为十六进制表示形式。描述中的“下载后直接编译就行 有代码的注释 相当精简”说明了程序的易用性和简洁性,无需额外...

    58-Vivado二进制与BCD码互转设计.7z

    每四位二进制数代表一个十进制数位,例如0000代表0,1001代表9。在FPGA设计中,BCD码常用于模拟现实世界中的十进制计数器或显示器,因为它们可以直接映射到物理硬件的十进制数码管。 本设计中,Verilog HDL(硬件...

    二进制转换

    - **位运算**:在编程语言中,可以利用位移运算符(如左移`和右移`&gt;&gt;`)和按位与`&`、按位或`|`、按位异或`^`等进行进制转换。 - **查表法**:制作一个对应表格,查找每个位对应的其他进制值。 - **计算器工具**:...

    计算机基础二进制教案

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

Global site tag (gtag.js) - Google Analytics