我有一个数字,比方说4是二进制表示为100,我希望实现的是补充数字,即用0替换1和用0替换1。我可以这样实现它二进制补码0到1,1,0到
public class Foo {
public static void main(String[] args) {
String binaryString = Integer.toBinaryString(4);
StringBuilder out = new StringBuilder();
char[] chars = binaryString.toCharArray();
char x;
for (char ch : chars) {
if (ch == '1') {
x = '0';
} else {
x = '1';
}
out.append(x);
}
System.out.println(Integer.parseInt(out.toString(), 2));
}
}
在时间复杂性方面达到相同结果的最有效方法是什么?请注意,输入可能非常大,我们需要注意整数溢出。
更新 否定像〜n这样的数字会给出错误的结果,例如,
System.out.println(~4);
outputs -5 , expected 3
如何广泛被认为是输入数字?为什么'100'去代替'01111',比如说'11111011'? “10”应该转到“01”还是转到“101”? – user2357112 2014-12-01 18:22:14
另外,如果输入可能太大而不适合int,那么你如何接收它们?在stdin上输入文字? – user2357112 2014-12-01 18:22:55
那么使用按位否定('〜')怎么样? – fge 2014-12-01 18:22:59