美文网首页
Java中的原码、反码和补码

Java中的原码、反码和补码

作者: code希必地 | 来源:发表于2021-01-20 17:09 被阅读0次

1、实例

先来看个例子

public static void main(String[] args) {
    System.out.println(~2);
}

~在Java中是按位取反的意思,2是整形占4字节,其二进制表示为:

 0000 0000 0000 0000 0000 0000 0000 0010

按位取反后的结果为:

1111 1111 1111 1111 1111 1111 1111 1101

但是输出结果却是-3

2、原码、反码、补码

Java中存储的是有符号的数,在计算机中有符号的数是以补码的形式存储的。

2.1、原码

原码的二进制表示:最高位是符号位(1表示负数,0表示整数),其余位表示值的大小。
1和-1的原码表示为

1000 0000 0000 0000 0000 0000 0000 0001 //-1的原码
0000 0000 0000 0000 0000 0000 0000 0001 //1的原码

2.2、反码

  • 正数的反码是其本身
  • 负数的反码:符号位不变,其余位按位取反。
    -1的反码为
1111 1111 1111 1111 1111 1111 1111 1110

2.3、补码

  • 正数的补码是其本身
  • 负数的补码:在反码的基础上加1
    -1的补码为
1111 1111 1111 1111 1111 1111 1111 1111

3、分析

回到最初的问题:2在计算机中是以补码的形式存储的,由于正数的补码是其本身,所以2的补码为

0000 0000 0000 0000 0000 0000 0000 0010

~2表示按位取反,则对2的补码进行按位取反,结果为

1111 1111 1111 1111 1111 1111 1111 1101

从取反后的补码可知是负数,而负数转二进制规律:

1、取负数的绝对值的原码;
2、计算原码的反码;
3、对反码加一,获取补码。

我们可以反推出该负数绝对值的原码:

1、对补码减一,获取反码:1111 1111 1111 1111 1111 1111 1111 1100
2、将其按位取反获取原码:0000 0000 0000 0000 0000 0000 0000 0011
3、可知这个原码表示的是正数3,所以~2等于-3。

相关文章

  • 原码、反码、补码和移码

    书中关于原码、反码、补码和移码的定义如下(n是机器字长):原码: 反码: 补码: 移码: 原码, 反码, 补码的基...

  • 计算机为什么要使用原码、反码、补码

    1. 什么是原码、反码、补码 先看一个例子: +1和-1的原码、反码、补码的表示 原码、反码、补码的计算方式如下:...

  • JAVA负数取反与反码的问题

    要明白JAVA负数取反与反码的问题,我们首先需要了解原码、反码、补码的概念。 原码 在Java中,对于整数而言,其...

  • 软件测评师做题技巧

    第一类补码,反码,原码 正数:原码=反码;补码=原码负数:反码=原码求反;补码=反码+1 第二类用例概率的计算 测...

  • 2018-10-22 Python31 原码、反码、补码

    原码、反码、补码 1)如何计算补码?规则: 正数:原码 = 反码 = 补码负数:反码 = 符号位不变,其他位取反补...

  • 原码、反码和补码

    正数的原码、反码和补码相同,亦是正数 负数的原码、反码和补码符号位为1,代表负数,反码在原码的基础上符号位不变,其...

  • python中的原码反码和补码

    python中的原码反码和补码 原码反码和补码的概念 原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位...

  • Java中高位转低位溢出的计算过程

    结果是: 计算机中是以补码进行计算 正数的反码补码都是原码,如:10原码: 1010反码: 1010补码:1010...

  • 补码

    原码、反码、补码 原码:符号位 反码:减法变加法 补码:+1解决-0问题 数学原理 同余 反码:mod127 补码...

  • JAVA中负数的二进制表示

    计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,反码=原码按位取反 补码=反码+1。 移码为补码...

网友评论

      本文标题:Java中的原码、反码和补码

      本文链接:https://www.haomeiwen.com/subject/hvvkzktx.html