Java - 原码、反码、补码、类型强转

在Java中,基础知识用到了原码、反码、补码这三个概念,很多人学习完之后还是一脸懵逼,这里给大家讲述一下。

先说概念:
原码:原码就是数字在计算机底层的二进制
反码:反码就是将原码除符号位外,其他位都取反,0变1,1变0
补码:就是在反码的基础上最末位+1

再说一个重要概念:正数的原码、反码、补码一致;负数的原码就是它绝对值的补码

请读懂上面两个概念,这样才能看懂下面的例子!!!


接下来给大家做几个int类型强转成byte类型的例子:
第一个:
Java - 原码、反码、补码、类型强转_第1张图片

第二个:
Java - 原码、反码、补码、类型强转_第2张图片

总结规则:
(1) 向上强转:这个就是在前面补充少的位数就行,这里就不说了。
(2) 向下强转:重点就在这里,请牢记以下步骤:
     (A) 如果被强转的类型是正数:
          (a) 计算出二进制,这个二进制就是它的原码
          (b) 根据要强转到的类型去除多余的位数
          (c) 判断现在新的二进制串的最高位是0还是1,0表示我们强转后的数字为正数,1表示我们强转后的数字为负数
          (d) 如果最高位为0,将这个新的二进制串计算得出的数字就是强转后的结果
          (e) 如果最高位为1,那么取这个新的二进制串的补码,得到的补码就是我们需要的结果的原码,计算这个原码得到的数字就是强转后的结果
     (B) 如果被强转的类型是负数:
          (a) 计算被强转的数字的绝对值的原码,根据这个原码计算出补码,这个补码就是被强转的数字的原码(一句话:负数的原码就是它绝对值的补码
          (b) 根据要强转到的类型去除多余的位数
          (c) 判断现在新的二进制串的最高位是0还是1,0表示我们强转后的数字为正数,1表示我们强转后的数字为负数
          (d) 如果最高位为0,将这个新的二进制串计算得出的数字就是强转后的结果
          (e) 如果最高位为1,那么取这个新的二进制串的补码,得到的补码就是我们需要的结果的原码,计算这个原码得到的数字就是强转后的结果

上面两个例子都是在-128~127之内的,可能大家觉得是侥幸的。但是太晚了,太困了,在范围之外的就不给大家举例子。你们可以按照我上面给出的规则来自己试一下范围之外的。如果有不懂的地方,欢迎大家在评论区留言,233...

 

你可能感兴趣的:(Java,原码,反码,补码,强转)