将十进制数转换为1s补码然后再将数字转换为十进制的输出不符合预期。
MyApproach
我首先将数字从十进制转换为二进制。将所有Os替换为1,将替换为,然后将该数字转换为十进制。
任何人都可以指导我吗?我做错了什么?
代码:
public static int complimentDecimal(int num) {
int p = 0;
String s1 = "";
// Convert Decimal to Binary
while (num > 0) {
p = num % 2;
s1 = p + s1;
num = num / 2;
}
System.out.println(s1);
// Replace the 0s with 1s and 1s with 0s
for (int j = 0; j < s1.length(); j++) {
if (s1.charAt(j) == 0) {
s1.replace(s1.charAt(j), '1');
} else {
s1.replace(s1.charAt(j), '0');
}
}
System.out.println(s1);
int decimal = 0;
int k = 0;
for (int m = s1.length() - 1; m >= 0; m--) {
decimal += (s1.charAt(m) * Math.pow(2, k));
k++;
}
return decimal;
}
答案 0 :(得分:2)
首先,您必须将已替换的String分配给已定义的变量
s1.replace(s1.charAt(j),'1');
应该是
s1 = s1.replace(s1.charAt(j),'1');
接下来的情况是,当你按顺序改变时,它会改变所有类似匹配情况的字符 参考Replace a character at a specific index in a string?
答案 1 :(得分:2)
首先,您需要定义二进制表示应具有的位数或补码表示没有意义。
如果您转换'secret' => 'yoursecret';
二进制文件为100
补码是1100100
,0011011
现在转换27
。二进制为27
,补充11011
为00100
。
现在定义一个比特长度为8
4
为100
,补充01100100
为10011011
155
为155
,补充10011011
为01100100
可以工作,因为每个二进制表示的长度都是8位。这对于整个补充事物来说是绝对必要的
请考虑您现在对可转换的数字有限制
100
11111111
。{/ p>
现在我们谈到了我将更正你的代码
255
附加说明:不要大于MAX_BITS = 31,否则你需要在方法中使用long而不是int。
答案 2 :(得分:1)
问题(好的,其中一个问题)就在这里:
if(s1.charAt(j)==0)
Java中的字符实际上是整数,范围是0到65535.这些数字中的每一个实际上都是指Unicode图表中与该数字对应的字符。字符'0'
的值为48,而不是0.因此,当您创建了一个'0'
和'1'
字符串时,字符将具有整数值48和49.当然,当你将它与整数0进行比较时,无论如何都会得到false
。
尝试
if(s1.charAt(j)=='0')
(注意:好的,另一个答案是对的 - replace
不起作用。你不仅错误地使用它,不分配结果,这不是正确的方法无论如何,因为s1.replace(s1.charAt(j),'1')
将所有'0'
替换为'1'
个字符;它不会替换字符j
。如果您特意想要替换String
中的第j个字符1}}使用其他内容,您需要使用substring()
并构建新字符串,而不是replace()
。)
还有其他注意事项:(1)整数不是“十进制”或“二进制”。当您的方法获得num
参数时,这只是一个数字,而不是十进制数字或二进制数字。它在你的计算机中表示为二进制数字(除非你使用像Burroughs 3500这样的东西,但我认为所有这些都在Java发明之前就已经死了)。但它确实不被认为是十进制,二进制,八进制,十六进制,三进制或其他任何东西,直到你做一些将它转换为String
的东西。 (2)我知道你说过不发布替代方法,但你可以用一行代替整个方法:return ~num;
。这补充了所有的比特。如果您认为由于num
是十进制数而无法执行此操作,请参阅#1。 (3)“赞美”意味着对某人说些好话。如果您正在谈论翻转所有位,正确的拼写是“补充”。
答案 3 :(得分:1)
String.Replace(oldChar, newChar)
方法返回一个new
字符串,该字符串是用newChar替换给定字符串中所有出现的oldChar。它不会对给定的字符串执行更改。