我有一個數字,比方說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