`

【转载】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。
分享到:
评论

相关推荐

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

    c++ 计算机底层 原码反码补码的练习题,包括答案

    原码 补码 反码 按位运算

    介绍原码,补码,反码,按位运算等基础知识和简单例子

    原码、反码、补码知识总结

    数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.因为在两个整数的加法运算中是没有问题的,于是就发现问题... 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.

    C语言基础 原码、反码、补码和移码详解

    原码、反码、补码、移码的作用? ... 为了便于运算,带符号位的机器数可采用原码、反码和补码等不同的编码方法,机器数的这些编码方法称为码制。  原码、反码、补码、移码如何表示?  举例:[+4

    计算机组成原理第二章-运算方法与运算器

    补码的加减运算,定点原码一位乘、除运算,定点补码一位乘、除运算及其逻辑结构; 变形补码、运算方法(尤其是补码)的理解,溢出、进位等问题的出现和解决方法; 定点数的变形补码加减运算; 原、补码乘法和除法...

    对计算机常见数据的分类.md

    对计算机中常见数据简单分类:机器数 与 真值、原码、反码、补码以及扩展。主要讲述了正负数的原码反码补码之间的相互转换 以及补码的简单运算。

    原码, 反码与补码基础知识详细介绍

    原码, 反码,补码详解 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人...

    原码、反码和补码1

    于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只

    yuchuangu85#Develop-Source#一文搞懂位运算、补码、反码、原码1

    上面的Demo中有“2”和“-2”,这是两个十进制数,并且是int类型的(java中占四个字节),位运算是基于二进制bit来的,所以我们需要将十进制转换为二进制

    计算机实习实验报告.docx

    补码加减交替除法运算规则,补码两位乘法运算,补码一位乘法运算,乘法原码两位运算,乘法原码一位运算,原码加减交替除法运算,补码加减法运算。 实验设备 计算机实习实验报告全文共19页,当前为第1页。电脑,仿真...

    汇编实验报告(含源代码)

    1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成...2、有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。

    计算机的机器数表示及运算(微机原理接口技术习题解答)

    我解答的习题集:原码、反码、补码、移码,浮点数编码、补码加法运算、补码乘法运算

    计算机组成原理本科生模拟试卷02

    A 原码 B 补码 C 移码 D 反码 3 在定点二进制运算器中,减法运算一般通过( )来实现。 A 原码运算的二进制减法器 B 补码运算的二进制减法器 C 原码运算的十进制加法器 D 补码运算的二进制加法器

    单片机---文本教案

    第一章 单片微型计算机概述 ...5、掌握真值、原码、反码及补码间的换算 6、熟悉BCD 码和ASCII 码 教学重点: 1、单片机的含义及作用 2、补码的概念及运算 3、BCD 码及ASCII 码 教学难点: 1、数制间的转换 2、补码的运算

    Python 刷题笔记:位运算专题一

    反码:正数的反码与原码相同;负数反码最高位符号位不变,其余为取反,即 1 变 0、0 变 1 补码:正数的补码与原码相同;负数的补码为其反码 +1 以正数 4 和负数 -5 为例,其 32 位二进制形式如下:

    Colennn#HelloWorld#进制、位运算及其运用1

    运算位运算应用:1.数据加密:​ 一个数据对想用的数据异或^两次,其值不变2.两个变量值的交换:原码、反码和补码原码:二进制,最高为符号位,0为正数,1为负数​

    第2章 运算方法和运算器.pptx

    计算机组成原理中运算方法和运算器ppt,有关反码补码原码,加速器加法减法乘法除法等操作的逻辑实现和电路图实现。

    javascript 二进制运算技巧解析

    1、原码、反码、补码,正数减法转补码加法 js 在进行二进制运算时,使用 32 位二进制整数,由于 js 的整数都是有符号数,最高位0...1变0) 补码:正数补码与原码相同,负数补码为反码加 1 (符号位参与运算,其实只有求

    PHP 使用位运算实现四则运算的代码

    原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值 反码:正数反码和原码一样;如果是负数,符号位不变,其余各位取反 补码:正数补码和原码一样;负数补码为反码加 1 计算机中的数使用...

Global site tag (gtag.js) - Google Analytics