原码、反码、补码

来源:互联网 发布:算法统宗中的题目 编辑:程序博客网 时间:2024/06/05 20:54

java int   范围: 

采用的是补码进行表示:FFFF~7FFF  即 -2^32 ~~ 2^32-1

-2147483648到2147483647才是正确的!



这篇博客对原码、反码、补码设计的原理讲得很清楚:https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

以下几点注意:

1) -1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000] 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000], 这是不正确的)

2)  原码中  [00000000]与[10000000] 均表示 0

       补码中  [00000000] 表示 0,[10000000] 表示 -128,补码多了一个表示最小值的数。

       反码中  [00000000]与[11111111] 均表示 0

3)  正数的三种编码方式相同:

       1  =  [00000001]原 = [00000001]补 = [00000001]反

       负数的三种编码方式均不同:

       -1  = [10000001]原 =  [11111111]补  = [11111110]反

代码片段:byte bmax, bmin;short shmax, shmin;char cmax, cmin;int imax, imin;long lmax,lmin;float fmax,fmin;double dmax,dmin;fmax = Float.MAX_VALUE;fmin = Float.MIN_VALUE;dmax = Double.MAX_VALUE;dmin = Double.MIN_VALUE;bmax = Byte.MAX_VALUE;bmin = Byte.MIN_VALUE;cmax = Character.MAX_VALUE;cmin = Character.MIN_VALUE;shmax = Short.MAX_VALUE;shmin = Short.MIN_VALUE;imax = Integer.MAX_VALUE;imin = Integer.MIN_VALUE;lmax = Long.MAX_VALUE;lmin = Long.MIN_VALUE;System.out.println("float max="+fmax);System.out.println("float min="+fmin);System.out.println("double max="+dmax);System.out.println("double max="+dmin);System.out.println("byte max="+bmax);System.out.println("byte min="+bmin);System.out.println("char max="+cmax);System.out.println("char min="+cmin);System.out.println("short max="+shmax);System.out.println("short min="+shmin);System.out.println("int max="+imax);System.out.println("int min="+imin);System.out.println("long max="+lmax);System.out.println("long min="+lmin);输出:float max=3.4028235E38float min=1.4E-45double max=1.7976931348623157E308double max=4.9E-324byte max=127byte min=-128char max=?char min=short max=32767short min=-32768int max=2147483647int min=-2147483648long max=9223372036854775807long min=-9223372036854775808说明:实际上是每种类型的Container类定义的常量。


0 0