【Java基础概括】原码,反码,补码

java的基本类型

在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。(一个字节等于8个bit)
类型 字节数 bit(位)数 取值范围 备注
整型 int 4字节 4*8
short 2字节 2*8 -32768~32767
long 8字节 8*8
byte 1字节 1*8 -128~127
浮点型 float 4字节 4*8 float类型的数值有一个后缀F(例如:3.14F)
double 8字节 8*8 没有后缀F的浮点数值(如3.14)默认为double类型
char型 char 2字节 2*8
boolean型 boolean 1字节 1*8 false、true

二进制

二进制是计算技术中普遍采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”

注:这里以1个字节(8位)举栗子java

机器数:

在计算机中表示的带符号的二进制数称为机器数
* [+27] 的二进制是 [ 0001 1011 ]

原码:

原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增长了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其他位表示数值的大小。 原码也是机器数的一种表示方式。
* [+10] =  [ 0000 1010 ]
 * [-10] =  [ 1000 1010 ]

真值:

由于第一位是符号位,因此机器数的形式值就不等于真正的数值。例如上面的有符号数 10001010,其最高位1表明负,其真正数值是 -10 而不是形式值138(10001010转换成十进制等于138)。因此,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
* [+10] = [ 0000 1010 ] ,真值 = [ +000 1010 ] = +10
* [-10] = [ 1000 0001 ] ,真值 = [ –000 1010 ] = –10

反码:

正数的反码与其原码相同;
负数的反码是在其原码的基础上, 符号位不变,其他各个位取反.
* [+10] 原码 = [ 0000 1010 ]  反码 = [ 0000 1010 ]
* [-10] 原码 = [ 1000 1010 ]  反码 = [ 1111 0101 ]

补码:

正数的补码与其原码相同;
负数补码为其绝对值各位取反加1;

注:java中是以补码的方式显示内容算法

* [+10] 原码 = [ 0000 1010 ]  补码 = [ 0000 1010 ]
* [-10] 原码 = [ 1000 1010 ]  补码 = [ 1111 0110 ] 

* [-10]的补码算法:  
                原码 1 0 0 0 1 0 1 0  
                反码 1 1 1 1 0 1 0 1  
                -------------------- +1
                补码 1 1 1 1 0 1 1 0

总结:

正整数的原码、反码和补码都同样;编码

负数部分:spa

  • 原码和反码的相互转换:符号位不变,数值位按位取反
  • 原码和补码的相互转换:负数补码为其绝对值各位取反加1;

补码求原码:code

  • 若是补码的符号位为“0”,表示是一个正数,因此补码就是该数的原码。
  • 若是补码的符号位为“1”,表示是一个负数,求原码的操做能够是:符号位为1,其他各位取反,而后再整个数加1。

拓展

注:这里以1个字节(8位)举栗子it

  • 证实: 8 + 2 = 10
[8]补码   0 0 0 0 1 0 0 0
[2]补码   0 0 0 0 0 0 1 0 
       +
---------------------------
         0 0 0 0 1 0 1 0 
         
得出的二进制为补码,转原码后转十进制,的 10
  • 证实: -3 - 2 = -5
1. 转换  (-3) + (-2) = -5
2. 求 -3 -2 的补码


[-3]补码   1 1 1 1 1 1 0 1
[-2]补码   1 1 1 1 1 1 1 0 
       +
---------------------------
        1 1 1 1 1 1 0 1 1   3.算出来的是[补码] 可是溢出了,由于1字节只有8位,则截取8位 后往前截取
          1 1 1 1 1 0 1 1  
          1 0 0 0 0 1 0 1  4.[补码转原码]
---------------------------
          1 0 0 0 0 1 0 1  = -5
  • 证实: -10 - 127 = 119
[-127]    1 0 0 0 0 0 0 1
[-3]      1 1 1 1 0 1 1 0 
       +
---------------------------
        1 0 1 1 1 0 1 1 1  
          0 1 1 1 0 1 1 1 
          0 1 1 1 0 1 1 1  1.[补码转原码] 正数的补码=原码
---------------------------
          0 1 1 1 0 1 1 1  = 119
相关文章
相关标签/搜索