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


先说概念:

原码:原码就是数字在计算机底层的二进制

反码:反码就是将原码除符号位外,其他位都取反,0变1,1变0

补码:就是在反码的基础上最末位+1


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


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


接下来给大家做几个int类型强转成byte类型的例子:

第一个:

java中bcd码 java码值_补码



第二个:

java中bcd码 java码值_反码_02



总结规则:

(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...