我正在尝试制作一个二进制计算器,它可以减去两个二进制数(只有基数为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;
}
}
}
答案 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:
定义两种方法:(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)