Java 对一串位的按位not操作
我有一个值为0111000000的字符串。如何在此字符串上执行按位not操作 如果我将其转换为整数,使用Java 对一串位的按位not操作,java,Java,我有一个值为0111000000的字符串。如何在此字符串上执行按位not操作 如果我将其转换为整数,使用~运算符并将其转换回二进制字符串,则生成的字符串具有额外的位。我希望输出正好是1000111111 下面的代码工作正常,但这不是一个好方法。还有其他更好的方法吗 String bstr=""; while(m!=str.length()) { char a=str.charAt(m); if(a=='1')
~
运算符并将其转换回二进制字符串,则生成的字符串具有额外的位。我希望输出正好是1000111111
下面的代码工作正常,但这不是一个好方法。还有其他更好的方法吗
String bstr="";
while(m!=str.length())
{
char a=str.charAt(m);
if(a=='1')
{
a='0';
bstr=bstr+a;
m++;
}
else
{
a='1';
bstr=bstr+a;
m++;
}
}
跟踪位字符串中有多少位。转换为整数并使用
~值
操作翻转位后,使用位掩码删除不需要的1
高端位
例如,假设您的位字符串具有固定的10位。然后可以使用:value&0x2ff
屏蔽不需要的高端位
如果位字符串中的位数是可变的:
value&(1试试这个
char[] a = s.toCharArray();
for(int i = 0; i < a.length; i++) {
a[i] = a[i]=='0' ? '1' : '0';
}
s = new String(a);
来自common lang的信息可能有助于:
StringUtils.replaceChars("0111000000", "01", "10");
您应该使用字符串生成器,这样您就可以在不创建许多垃圾字符串的情况下更改单个位。您还可以使用XOR翻转单个位:
b ^= 1;
它同时适用于二进制和ASCII数字值。也许这样可以:
String result = Integer.toBinaryString(~(Integer.parseInt("0111000000",2)));
将二进制字符串转换为int,使用按位not运算符进行反转,然后再转换回二进制字符串。您可以使用XOR
操作执行此操作
public String xorOperation(String value) {
String str1 = value;
long l = Long.parseLong(str1, 2);
String str2 = "";
for (int i = 0; i < str1.length(); i++) {
str2 = str2 + "1";
}
long n = Long.parseLong(str2, 2);
long num = l ^ n;
String bininaryString = Long.toBinaryString(num);
System.out.println(bininaryString);
return bininaryString;
}
公共字符串xRoperation(字符串值){
字符串str1=值;
longl=long.parseLong(str1,2);
字符串str2=“”;
对于(int i=0;i
很好,但是a[i]^=1;
更整洁。&0x3FF
有什么作用?
public String xorOperation(String value) {
String str1 = value;
long l = Long.parseLong(str1, 2);
String str2 = "";
for (int i = 0; i < str1.length(); i++) {
str2 = str2 + "1";
}
long n = Long.parseLong(str2, 2);
long num = l ^ n;
String bininaryString = Long.toBinaryString(num);
System.out.println(bininaryString);
return bininaryString;
}