Java中的二进制减法

时间:2012-11-14 18:31:54

标签: java binary

我正在尝试制作一个二进制计算器,它可以减去两个二进制数(只有基数为2)而无需解析它。

任何人都可以帮助我解决上面数字为零而下面数字为零的情况,我似乎无法为其编写代码。

for (int i = ss.length()-1; i > -1; i--)
        {
            if(s.charAt(i)=='0' && ss.charAt(i)=='0') sb.append("0");
            else if (s.charAt(i)=='1' && ss.charAt(i)=='0') sb.append("1");
            else if (s.charAt(i)=='1' && ss.charAt(i)=='1') sb.append("0");
            else
            {
                sb.append("1");
                doit(s,i+1,sb);
            }
        }

        for (int i = s.length() - ss.length(); i >-1; i--) 
        {
            sb.append(s.charAt(i));
        }

        ArrayList<Character> res = new ArrayList<>();
        for (int i =  sb.length()-1; i > -1; i--)
        {
            res.add(sb.charAt(i));
        }
        System.out.println(res);
    }
    public static void doit(StringBuilder s, int i, StringBuilder sb)
    {
        for (int j = i; j > -1; j--)
        {
            if(s.charAt(j)=='0')
            {
                s.setCharAt(j, '1');
            }
            else
            {
                s.setCharAt(j, '0');
                break;
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

二元减法规则。

1 - 1 = 0
0 - 0 = 0
1 - 0 = 1
0 - 1 = 1 (needs a carry bit from a higher bit position.  
    You might have to check several higher bits before you 
    find the carry bit.  -1 otherwise.)

答案 1 :(得分:0)

你可以严格按位,从右到左,至少像一些芯片那样做。棘手的知识是一个五列表:(a,b,从先前位置进位) - &gt; (结果,新进位)。你实际上并没有从较高级别的职位借款;你将underverflow转移到那些。见表2.4:

http://books.google.com.ua/books?id=vpWS-s4d5vMC&pg=PA25&lpg=PA25&dq=binary+subtraction+table+carry&source=bl&ots=458JWgZl8v&sig=sjuXedv96KCbNWmxQAPNQo7iuRw&hl=en&sa=X&ei=i-6jUI7IB8jusgay8IDQDQ&ved=0CBwQ6AEwAA#v=onepage&q=binary%20subtraction%20table%20carrysubtract&f=false

定义两种方法:(a,b,从先前位置进位) - &gt;结果和(a,b,从先前位置进位) - &gt;新的携带位,并从右到左应用它们。


替代方案:根据此处的规则反转您的第二个参数:http://simple.wikipedia.org/wiki/Negative_binary_numbers

然后将#1添加到反转#2:)。

PS。谁说这是一个糟糕的任务:)?

答案 2 :(得分:-1)

SELECT * FROM `jobs` WHERE match(posttitle) against('shiva' in boolean mode)