`

【转载】java位运算与原码反码补码

 
阅读更多

运算规则

计算机中的数字运算是以补码形式进行的。所以在做位运算时,首先要将数字转换为补码形式。

补码规则

正数就不说了,说说负数,简单地说,负数求补码,是对原码”取反加1“。
这句话是不负责任的,因为原码、反码和补码概念中,存在符号位,总结一下,”取反加1“时符号位怎么办:
1)取反时,符号位不参与取反。
2)加1时,符号位参与加1。
3)特殊补码,即首位为1,其它位全是0。对于这种形式的补码,不要去求它的原码了,求出来也不对,它就表示该类型中的最小负数,比如10000000表示byte类型中的最小负数-128。

java位运算规则

java有7种位运算符:与(&),或(|),异或(^),取反(~),左移(<<),有符号右移(>>),无符号右移(>>>)。
这7种位运算符,运算时,符号位都要参与运算。




有了上面3种规则,java位运算就很简单了,

例子1:与(&)

int a=127;
int b=-2;
int c=a&b;
System.out.println(c);

打出来的是

126

运算过程:
先求补码,
127的补码是
00000000 00000000 00000000 01111111,
-2的补码是
11111111 11111111 11111111 11111110
所以a&b的结果是
00000000 00000000 00000000 01111110
这个数仍旧是补码,要求它的原码,很简单,它是正数,原码就是本身,即126。

例子2:取反(~)

int a=Integer.MAX_VALUE;
int b=~a;
System.out.println(b);

打出来的是

-2147483648

运算过程:
a是int中最大的正数,所以a的补码是
01111111 11111111 11111111 11111111
取反后的补码是
10000000 00000000 00000000 00000000
这是个特殊补码,即int中最小的负数,-2147483648。

System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
打印看看
-2147483648
2147483647

例子3:左移(<<)

int a=1;
int b=a<<31;
System.out.println(b);

打印出来的是

-2147483648

运算过程:
1的补码是
00000000 00000000 00000000 00000001
左移31位后
10000000 00000000 00000000 00000000
这个很眼熟了吧,int中最小的负数,所以是-2147483648。
分享到:
评论

相关推荐

    计算机基础知识:原码反码补码练习(含答案)

    计算机基础知识在IT领域至关重要,尤其是对于理解计算机内部...了解这些基础知识对于进行计算机编程、内存管理、硬件设计等IT工作都非常重要,特别是在处理数值运算时,理解和应用原码、反码和补码的概念是至关重要的。

    原码反码补码讲课.pptx

    在反码中,正数的表示与原码相同,而负数则是其原码除符号位外的所有位取反(0变1,1变0)。这样的表示方法解决了原码中的一些问题,如“-0”的问题不再存在,加法和减法的规则得到了一定的统一,但是仍旧保留了一些...

    原码反码补码PPT学习教案.pptx

    原码反码补码PPT学习教案 原码反码补码是计算机系统中最基本的概念之一,了解原码反码补码的原理和应用对于计算机科学和技术的学习非常重要。本资源摘要信息将对原码反码补码的概念、特点和应用进行详细的介绍。 ...

    原码、反码、补码三码转换(C#)

    在计算机科学中,原码、反码和...在实际应用中,理解原码、反码和补码的概念对于理解计算机底层数据存储和处理非常重要,尤其是在进行位运算和溢出检查时。通过C#等编程语言进行实践,能更好地帮助我们掌握这些概念。

    原码 补码 反码 按位运算

    原码、补码和反码是三种常见的二进制表示法,主要用于表示有符号整数,而按位运算则是对二进制数进行操作的基础手段。下面将详细阐述这些概念。 一、原码(正码) 原码是最直观的二进制表示方法,直接反映了数字的...

    补码源码反码转换工具,补码反码原码的转换工具,C/C++

    在计算机科学中,二进制表示的数字有三种主要形式:原码、反码和补码,主要用于表示有符号整数。本项目是基于C++的MFC(Microsoft Foundation Classes)框架实现的一个实用工具,旨在帮助用户理解并进行原码、反码和...

    原码,反码,补码详解及原理.docx

    正数的补码与原码相同,负数的补码是其反码的基础上最低位加1。例如,-7的反码11110000B,其补码是11110001B。补码的主要优势在于可以将减法转化为加法,因为对于负数,补码表示的是其真值的相反数加上模(这里是256...

    二进制-原码-补码-反码.pdf

    正数的反码与原码相同,负数的反码是对原码逐位取反。例如,+7的反码是0000111,-7的反码是1111000。 补码是指对反码末位加1的表示法。正数的补码与原码相同,负数的补码是在反码末位加1。例如,+1的补码是00000001...

    数字的原码、反码和补码

    负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127),共 256 个。注意:(-128) 没有相对应的原码和反码,(-128) = ...

    JAVA基础补充(0)-原码反码补码.doc

    在进行位运算时,理解原码、反码和补码的转换规则非常关键,因为它们直接影响计算结果。例如,位左移、位右移等操作在正负数上会有不同的效果,这都源于整数的二进制表示方式。 总之,原码、反码和补码是计算机科学...

    电脑计算8位原码反码补码表

    在8位二进制中,正数的补码与原码和反码相同,但负数的补码会有所不同。例如,-1的原码是1000 0001,反码是1111 1110,补码是1111 1111。对于-127,它的原码和反码都是1111 1111,补码是1000 0000,而这个特殊的值...

    机器数, 真值, 原码, 反码, 补码 详解

    正数的反码与原码相同,但负数的反码是原码除符号位外所有位取反。如-1的原码10000001反码为11111110。尽管反码解决了减法的一部分问题,但仍然无法直接得到正确结果。 最后,补码被设计出来,它不仅解决了减法问题...

    进制转换及原码反码补码.docx

    进制转换及原码反码补码 在计算机系统中,数字系统是基础部分,很多计算机科学家和程序员需要熟悉不同的数字系统和它们之间的转换。下面我们将详细介绍进制转换、原码、反码和补码的概念和应用。 一、进制数的表达...

    学习电脑信息原码反码补码详细解析

    "学习电脑信息原码反码补码详细解析" 本文详细介绍了原码、反码和补码的概念、计算方法和应用场景。在学习原码、反码和补码之前,需要了解机器数和真值的概念。机器数是指一个数在计算机中的二进制表示形式,带符号...

    计算机中的原码、反码和补码

    此外,对于0这一特殊情况,无论正负,其原码、反码和补码均相同,均为00000000,这确保了零的唯一性表示,避免了在数学运算中可能出现的混淆。 ### 实际应用案例 在实际编程中,理解原码、反码和补码的概念对于...

    原码、反码、补码、移码与浮点.doc

    原码、反码、补码、移码与浮点数 原码、反码、补码、移码是计算机科学中用于表示数字的编码方式,浮点数是一种特殊的数值表示方式。本文将对原码、反码、补码、移码进行详细的介绍,并对浮点数的表示方式进行讨论。...

    原码、反码、补码的相关原理

    在现代计算机体系结构中,数值一般采用补码形式存储和运算,这是因为补码不仅简化了加减法的运算流程,而且使得符号位可以与数值位一样参与运算,无需额外的硬件支持。在高级编程语言中,虽然程序员通常不直接接触到...

    原码反码补码的定义PPT学习教案.pptx

    原码、反码和补码是三种不同的二进制表示方法,主要用于表示有符号整数,尤其是在进行算术运算时。 **原码**是直接用最高位作为符号位来表示数字的正负,0代表正,1代表负。例如,二进制的`0110`表示十进制的6,而`...

    进制转换及原码反码补码练习题.doc

    在计算机科学与工程领域中,进制转换以及原码、反码、补码的概念是基础中的基础,它们构成了数字信息处理的核心。本文档旨在通过一系列的练习题来加深读者对于这些概念的理解与掌握。 首先,我们来看看进制转换。...

    整数的原码,反码和补码

    综上所述,原码、反码和补码是计算机内部表示有符号整数的重要方式,它们各有特点和适用场景,其中补码因其算术运算的简便性而在现代计算机体系结构中占据了主导地位。理解这些编码方式对于深入学习计算机组成原理和...

Global site tag (gtag.js) - Google Analytics