yuan码fan码bu码

package complement;

import java.util.Scanner;

public class complement
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个(-127)-128的整数a");
        int Originala;
        int Originalb;
        while (true)
        {
            Originala = sc.nextInt();
            if (Originala >= -127 && Originala <= 128)
            {
                System.out.println("a的原码是:" + getBinary(Originala));
                if (Originala > 0)
                {
                    System.out.println("a的反码是:" + getBinary(Originala));
                    System.out.println("a的补码是:" + getBinary(Originala));
                } else
                {
                    System.out.println("a的反码是:" + getReverse(getBinary(Originala)));
                    System.out.println("a的补码是:" + getComplement(getReverse(getBinary(Originala))));
                }

                break;
            } else
            {
                System.out.println("超出范围,请重新输入");
            }
        }
        System.out.println("请输入一个(-127)-128的整数a");
        while (true)
        {
            Originalb = sc.nextInt();
            if (Originalb >= -127 && Originalb <= 128)
            {
                System.out.println("b的原码是:" + getBinary(Originalb));
                if (Originalb > 0)
                {
                    System.out.println("b的反码是:" + getBinary(Originalb));
                    System.out.println("b的补码是:" + getBinary(Originalb));
                } else
                {
                    System.out.println("b的反码是:" + getReverse(getBinary(Originalb)));
                    System.out.println("b的补码是:" + getComplement(getReverse(getBinary(Originalb))));
                }

                break;
            } else
            {
                System.out.println("超出范围,请重新输入");
            }
        }
        String ca=getComplement(getReverse(getBinary(Originala)));
        String cb=getComplement(getReverse(getBinary(Originalb)));
       int [] complementa=new int[8];
       int [] complementb=new int[8];
       for(int i=0;i<8;i++) {
           complementa[i]=Integer.parseInt(ca.charAt(i)+"");
           complementb[i]=Integer.parseInt(cb.charAt(i)+"");
       }
       System.out.println("按位与的结果:");
       System.out.println(getBinary(Originala&Originalb));
       System.out.println("按位异或的结果:");
       System.out.println(getBinary(Originala^Originalb));

    }
    
    
    public static String getBinary(int k)
    {
        String str = "";
        if (k == 0)
            return "00000000";
        else
        {
            int flag = k > 0 ? 1 : 0;
            k = k > 0 ? k : (-k);
            while (k != 0)
            {
                str = k % 2 + str;
                k = k / 2;
            }
            int in = Integer.parseInt(str);
            if (flag == 1)
            {
                str = String.format("%08d", in);
            } else
            {
                str = "1" + String.format("%07d", in);
            }

            return str;
        }
    }

    public static String getReverse(String str)
    {
        String str2 = "";
        for (int i = 1; i < str.length(); i++)
        {
            if (str.charAt(i) == '1')
            {
                str2 = str2 + "0";
            } else if (str.charAt(i) == '0')
            {
                str2 = str2 + "1";
            }
        }
        return "1" + str2;
    }

    public static String getComplement(String str)
    {
        if ("11111111".equals(str))
            return "00000000";
        else
        {
            int index = 0;
            String str2 = "";
            int flag = (Integer.parseInt(str.charAt(7) + "") + 1) == 2 ? 1 : 0;// 1表示进位,0表示不用进位
            if (flag == 1)
            {
                for (int i = str.length() - 1; i >= 0; i--)
                {
                    if (flag == 1)// 需要进位的话 {
                    {

                        if (Integer.parseInt(str.charAt(i) + "") + 1 == 2)
                        {
                            str2 = "0" + str2;
                            flag = 1;
                        } else if (Integer.parseInt(str.charAt(i) + "") + 1 == 1)
                        {
                            str2 = "1" + str2;
                            index = i;
                            break;
                        }
                    }

                }
                str2 = str.substring(0, index) + str2;

            } else
            {
                str2 = str.substring(0, 7) + "1";
            }

            return str2;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/yanwenhui/p/11546277.html