美文网首页
java中对一个整数进行取反后关于输出值的分析

java中对一个整数进行取反后关于输出值的分析

作者: LiChangBao | 来源:发表于2017-03-07 19:03 被阅读0次

在分析之前必须先明确如下几点:

1.Java是用补码来存储负数的,也就是说我们对一个数进行取反输出,输出的其实是一个在内存中以补码形式所存在的数;

2.原码,反码,补码的转换规则:{

(1)正数的原码,反码,补码完全一样即符号位固定为0数值位相同;

(2)负数的符号位固定为1,由原码转变为补码时的规则如下:  {

    (1)原码符号位为1固定不变,整数的每一位二进制数位取反得到反码;

    (2)反码符号位为1不变,在反码数值位最低位加1,得到补码。

  }

}

注:对一个数取反,得到的可不是它的反码哦!


举例:

public class Test{

      public static void main(String[] args){

                int a = 8;

                System.out.println(~a);//测试发现输出-9,而不是大多数人认为的7

      }

}

分析:

正数8的二进制表示如下:

00000000 00000000 00000000 00001000   (正数8的原码,补码,反码都是这串二进制数)

对正数8进行取反得:

11111111 11111111 11111111 11110111(*)

可以发现对正数8进行取反后由于符号位变成了1故得到了一个负数然而java存储负数时是用其补码来进行存储的即问题转化为求由于对正数8取反所得的负数存储问题!按照负数原码和补码转化规则:

1.(*)的符号位1不变,其它位取反得到反码:

     10000000 00000000 00000000 00001000

2.反码的符号位不变,反码的数值位最低位加1,得到补码:

     10000000 00000000 00000000 00001001(该串二进制数即为输出的-9)

以上就是为什么对正数8取反操作后输出的值为-9的原因。

相关文章

  • java中对一个整数进行取反后关于输出值的分析

    在分析之前必须先明确如下几点: 1.Java是用补码来存储负数的,也就是说我们对一个数进行取反输出,输出的其实是一...

  • JS----运算符

    JS中为我们提供了三种逻辑运算符: ! 非:!可以用来对一个值进行非运算 所谓非运算就是值对一个布尔值进行取反...

  • 476. 数字的补数

    内容 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围...

  • 476. 数字的补数

    题目 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围...

  • Leetcode476. 数字的补数

    题目 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围...

  • 476. 数字的补数

    给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围内。你...

  • 数字的补数

    题目: 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 示例: 输入: 5输出: 2解释: 5 的二...

  • 数字的补数

    给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 示例 1: 输入: 5输出: 2解释: 5的...

  • 476. 数字的补数

    给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。注意:给定的整数保证在32位带符号整数的范围内。你可以...

  • 476-数字的补数

    给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意:给定的整数保证在32位带符号整数的范围内。你可...

网友评论

      本文标题:java中对一个整数进行取反后关于输出值的分析

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