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位存储一个数据。

浙公网安备 33010602011771号