1.原码、反码、补码都是由符号位和其他位构成,符号位表示正负,0为正1为负,其余位表示数值的绝对值,因此正数的原码、反码、补码一致,0的反码、补码都是0。
2.负数的反码在原码的基础上符号位不变,其余位取反
3.负数的补码=反码+1
4.java中的数都是有符号的,计算机运算时都是以补码的方式来运算的(原码–>反码–>补码,计算),看结果时要看原码(补码–>反码–>原码)
转换思路:
原码—>反码:第1位不变,从第2位开始0变1,1变0
反码—>补码:从最低位开始进1,若当前位为0,则进1后停止进位,若当前位为1,则1变0后接着进位,直到遇到0,停止进位
(可以理解为携带的1是否上交出去,只有遇到0才能交出去,遇到1则上交失败,将当前为变为0后继续寻找下一个位置)
public static String originalToComplement(String original)
{
//取符号位
char signBit=original.chatAt(0);
StringBuilder fanma = new StringBuilder();
StringBuilder buma