java个人学习笔记:原码反码补码

机器数是将符号“数字化”的数,是数字在计算机中的二进制表示形式。机器数有两个特点:一是符号化,另一个是其数的大小受机器字长的限制。

特点: 

  数字的符号化。实用的数据有正数和负数,由于计算机内部硬件只能表示两种物理状态。因此使用数据的+或者-,用0和1表示。通常这个符号放在二进制数的最高位。因为符号位占据一位,数的形式值不等于真正的数值,带符号位的机器数对应的数值为机器数的真值。

  二进制的位数收机器设备的限制。机器内部设备一次能表示的二进制位数叫机器数。一台机器的字长是固定的。8位叫一个字节,机器字长一般都是字节的整数倍,如字长8位,16位。

 

原码

将数的真值形式中”+“用”0“表示,”-“用”1“表示,叫做数的源码形式,简称原码。

  为了计算方便。机器总是将减法变成加法计算。

  若 1 –1 的运算,在机器中实为1 + (-1) 则原码为 0000 0001  + 1000 0001 = 1000 0010 = (-2)十进制,这个显然是错误的。

反码

正数的反码和原码一样。负数的反码,除了符号位,其他的位数全部取反。

  1 –1 的运算,在机器中实为 1 + (-1) 则反码计算为 0000 0001 + 1111 1110 = 1111 1111 转换成源码是 1000 0000 所以为-0 然而 0000 0000 表示的也是+0 都是为0 ,这个显然也不是最好的。

补码

正数的补码和原码一样。负数的补码为反码加+1     

  1 – 1 的运算,在机器中实为 1 + (-1)则反码为 0000 0001 + 1111 1110 补码为 0000 0001 + 1111 1111 = 0000 0000 (补码) = 0

  还可以表示-128  = –1 + (-127) = 1000 0001 + 1111 1111(原码) = 1111 1110 + 1000 0000 (反码) = 1111 1111 + 1000 0001(补码) = 1000 000(补码)

 

原码的计算

除以2取余数的逆

   13

     6                1

       3              0

         1            1

           0          1

余数为1011 他的逆为1101 即13的原码为 0000 1101

-13

即为13的原码但是符号位为1 即1000 1101

 

计算中底层的数据都是以二进制存储的,并且以补码的形式存储(上面说明的原码和反码在存储数据时的缺点)

java整数常量存储一般默认是int存储的,并且是4位,即为32位存储一个数据。

posted @ 2015-05-30 23:06  缥缈的云落寞的天  阅读(878)  评论(0)    收藏  举报