再次复习原码反码补码 有感

java 中byte一个字节,8位,所能表示的数的范围 是 -128~127,为什么呢?正常来说应该是-127 ~  127 ,有一位符号位才合理,带着疑问进入复习;

1:计算机中所有操作的是操作数字的补码;

定义:

  正数的,原码,反码,补码都是本身,例 4(原码)是 0000 0100  ;4(反码)0000 0100  ; 4(补码)0000 0100

  负数的   原码,就是平时自己用二进制直接表示的形式(第一位符号位),例如-4(原码) 是1000 0100,通俗易懂,第一位1代表这是个负数,后面的就代表是个4,合起来就是个-4,这里强调的是 负数的原码 就是我们能直接读出来的这种形式;

  负数的反码,原码除符号位取反,用途来求补码的;例如 例如-4(返码) 是1111 1011;

  负数的补码:

1:通过上面的反码 ,直接加1;例如 例如-4(补码) 是1111 1100;

2:负数的 补码 就是其正数的 原码 全部取反 加1;例如 4(原码)是 0000 0100  - -》1111 1011 - -》1111 1100;

2:8位在计算机中表示的范围是(补码):

表示的正数 ,0000 0001 ~ 0111 1111 代表 1~(2^7)-1

表示的负数 -127~-1 也就是求其补码,通过上面两个方式

-127(补码)=  --》127( 原码)= 0111 1111 -->(全部取反)1000 0000- ->(加1)1000 0001

-1(补码)=  --》1( 原码)=0000 0001  -->(全部取反)1111 1110- ->(加1)1111 1111

 -127~-1 对应的补码是 1000 0001~1111 1111 

再加上谜之尴尬的 0  --》 0000 0000 还有一种表现1000 0000,肯定只取一种,往下看; 

合起来就是   1000 0001~0111 1111 也就是正常理解的 -127 ~127

但是 聪明的设计者 发现 还有 1000 0000 没有利用 ,其实就是 -128的 补码,-128 = -127+ (-1)= 1000 0001(补)+1111 1111 (补)= 1,1000 0000多了一位去掉, = 1000 0000(补)转化成 原码 减一再除符号位取反 还是1000 000(原),故用1000 0000来表示-128

所以8位在计算机中 表示的范围是 -128 ~ 127,其他的位数也是这个道理;

原文地址:https://www.cnblogs.com/xlblog/p/12873085.html