1

解析せずに 2 つの 2 進数 (基数 2 のみ) を減算するバイナリ計算機を作成しようとしています。

上の数字にゼロがあり、下の数字に1がある状況で誰かが私を助けることができますか?私はそのコードを書くことができないようです.

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;
            }
        }
    }
4

3 に答える 3

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.)
于 2012-11-14T18:40:31.063 に答える
0

少なくとも一部のチップが行うように、厳密にビットごとに右から左に行うことができます。トリッキーな知識は 5 列のテーブルです: (a,b, 前の位置からのキャリー ビット) -> (結果, 新しいキャリー ビット)。実際には、より高いレベルのポジションから借りることはありません。代わりにアンダーフローをそれらに運びます。こちらの表 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-6jUI7IB8jusgay8=IDCBwAEved&6CBwQDw&6 onepage&q=binary%20subtraction%20table%20carrysubtract&f=false

(a,b, 前の位置からビットをキャリー) -> 結果と (a,b, 前の位置からビットをキャリー) -> 新しいキャリー ビットの 2 つの方法を定義し、右から左に適用します。


別の方法: http://simple.wikipedia.org/wiki/Negative_binary_numbersのルールに従って、2 番目の引数を反転します。

次に、反転した #2 に #1 を追加します :)。

PS。誰が悪い割り当てだと言ったのですか :)?

于 2012-11-14T19:26:14.477 に答える