java中补码怎么计算,原码、反码、补码与位运算,原码补码反码

java中补码怎么计算,原码、反码、补码与位运算,原码补码反码原码 反码 补码与位运算 原码补码反码目录导引 一 原码 反码 补码二 位运算一 原码 反码 补码计算机只有加法运算器 计算器中存储 计算数据都是补码 正数和 0 的原码 反码 补码相同 负数的原码 反码 补码不同 原码 符号位 绝对值 0 表示正数 1 表示负数 反码 符号位不变 其余位取反补码 反码 11 为什么要用补码存储 以及补码计算 因为原码和反码计算会出现 0 和 0 以及计算错误问题 而补码

原码、反码、补码与位运算,原码补码反码

目录导引:

一、原码、反码、补码

二、位运算

一、原码、反码、补码

计算机只有加法运算器,计算器中存储、计算数据都是补码,正数和0的原码、反码、补码相同,负数的原码、反码、补码不同。

原码:符号位+绝对值(0表示正数,1表示负数)

反码:符号位不变,其余位取反

补码:反码+1

1、为什么要用补码存储,以及补码计算?

因为原码和反码计算会出现+0 和 -0以及计算错误问题,而补码是正确而简单的,符号位也直接参与运算。

示例:

int是4字节,1字节是8位,所以一个int值是32位,第一位是符号位,所以int的取值范围是 -2^31 ~ 2^31-1( 00000000 00000000 00000000~0 ,该二进制是补码)

分别计算 2+(-1)和1+(-1),过程如下:

2的原码、反码、补码分别是 00000000 00000000 00000010,00000000 00000000 00000010,00000000 00000000 00000010

1的原码、反码、补码分别是 00000000 00000000 00000001,00000000 00000000 00000001,00000000 00000000 00000001

-1的原码、反码、补码分别是 00000000 00000001, ,

2和-1原码相加,结果为: 00000000 00000011(原码),0代表正数,1代表负数,所以值为-3,错误。

2和-1反码相加,结果为:00000000 00000000 00000000(反码),对应原码的结果为00000000 00000000 00000000(原码),值为0,错误。

2和-1补码相加,结果为:00000000 00000000 00000001(补码),对应原码的结果为00000000 00000000 00000001(原码),值为1,正确。

1和-1原码相加,结果为: 00000000 00000010(原码),值为-2,错误。

1和-1反码相加,结果为: (反码),对应原码的结果为 00000000 00000000(原码),值为-0,不准确。(关于+0和-0的设计,有兴趣可自行百度)

1和-1补码相加,结果为:00000000 00000000 00000000(补码),对应原码的结果为00000000 00000000 00000000(原码),值为0,正确。

二、位运算

位运算符包括: 与(&)、或(|)、非(~)、异或(^)、左移(<>)、无符号右移(>>>)

&:二进制位同时为1时,结果为1,否则为0

| :位有一个为1时,结果为1,否则为0

~:位0变1,1变0

^:位不同时,结果为1,否则为0

<

>>:位整体向右移动,正数左边补0,负数左边补1

>>>:位整体向右移动,左边补0

示例:

public class BitOperationTest {

public static void main(String[] args) {

int a = 13, b = 6;

System.out.println(” a :” + getBinaryStr(a));

System.out.println(” b :” + getBinaryStr(b));

System.out.println(” a&b :” + getBinaryStr(a & b));

System.out.println(” a|b :” + getBinaryStr(a | b));

System.out.println(” ~a :” + getBinaryStr(~a));

System.out.println(” a^b :” + getBinaryStr(a ^ b));

System.out.println(” a<

System.out.println(” a>>b :” + getBinaryStr(a >> (b – 4)));

System.out.println(” -a :” + getBinaryStr(-a));

System.out.println(” a>>>b:” + getBinaryStr(a >> (b – 4)));

System.out.println(“-a>>>b:” + getBinaryStr((-a) >> (b – 4)));

}

private static String getBinaryStr(int n) {

StringBuilder str = new StringBuilder(Integer.toBinaryString(n));

int len = str.length();

if (len < 32) {

for (int i = 0; i < 32 - len; i++) {

str.insert(0, “0”);

}

}

return str.substring(0, 8) + ” ” + str.substring(8, 16) + ” ” + str.substring(16, 24) + ” ” + str.substring(24, 32);

}

}

//Result

a    :00000000 00000000 00000000 00001101

b    :00000000 00000000 00000000 00000110

a&b   :00000000 00000000 00000000 00000100

a|b   :00000000 00000000 00000000 00001111

~a   :

a^b   :00000000 00000000 00000000 00001011

a<<2  :00000000 00000000 00000000 00

-a   :

a>>2  :00000000 00000000 00000000 00000011

(-a)>>2 :

a>>>2 :00000000 00000000 00000000 00000011

(-a)>>>2:00

如有疑问欢迎提出,如有错误欢迎指正。

转载请注明本文地址:https://www.cnblogs.com/yqxx1116/p/11657307.html

相关文章暂无相关文章

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177423.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午7:33
下一篇 2026年3月26日 下午7:33


相关推荐

  • vmware15虚拟机激活码【2021免费激活】「建议收藏」

    (vmware15虚拟机激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~BI7J…

    2022年3月22日
    586
  • suds用法_soap是不可数名词吗

    suds用法_soap是不可数名词吗http://www.cnblogs.com/Tommy-Yu/p/5567091.html

    2025年7月12日
    4
  • springBoot前后端不分离Vue+elementUI脚手架

    springBoot前后端不分离Vue+elementUI脚手架新建 SpringBoot2 4 4 项目 目录结构如下新建 html 页面 login js 文件接口

    2026年3月16日
    1
  • jvm的垃圾回收器_java 垃圾回收器

    jvm的垃圾回收器_java 垃圾回收器1.GC分类按线程数:并行垃圾回收器:ParallelCollector.同一时间段内只有一个cpu执行垃圾回收操作.用户线程等待. 串行垃圾回收期:SerialCollector.同一时间段内可以有多个cpu执行垃圾回收操作,用户线程等待.按压缩方式:压缩式,内存有序.非压缩式:内存无序.按工作方式:并发式,及并发GC,用户线程和垃圾回收器同时交替进行. 独占式,垃圾回收线程进行时,用户线程需要等待.按工作区分:年轻代,老年代.2.GC性能指标吞吐量:用户线

    2025年10月26日
    3
  • jquery动画效果实例_动画js

    jquery动画效果实例_动画js文章目录JS动画实现概述平滑动画无缝连续滚动特效轮播图轮播图淡入淡出效果JS动画实现概述在CSS3中可以通过transition过渡属性可以实现动画JS可以利用CSS3中的transition属性实现元素动画平滑动画利用CSStransition属性实现平滑动画效果<button>开始动画</button><divid=”box”></div><script>varbtn=document.queryS

    2022年10月16日
    5
  • Eclipse汉化教程(详细图解)

    Eclipse汉化教程(详细图解)eclipse语言包下载:http://www.eclipse.org/babel/downloads.php1、打开浏览器,浏览“参考资料”内给出的“eclipse语言包下载”地址,在博客新页面找到地址链接,如图所示。“BabelLanguage…”开头的一栏下面就是各个eclise版本的语言包,2、目标锁定“BabelLanguagePackUpdateSiteforNeon”

    2022年6月5日
    153

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号