2使用XOR对给定字符串的补充?
在本节中,我们将看到如何使用二进制字符串的XOR操作找到2的补码。2的补码实际上是1的补码+1。我们将使用XOR操作获得1的补码。
我们将遍历LSb中的字符串,并查找0。将所有1翻转为0,直到得到0。然后翻转找到的0。
我们将从LSb出发。然后忽略所有0,直到得到1。忽略第一个1,我们将使用XOR操作切换所有位。
算法
get2sComp(bin)
begin
len := length of the binary string
flag := false
for i := len-1 down to 0, do
if bin[i] is 0, and flag is not set, then
ignore the next part, jump to next iteration
else
if flag is set, then
bin[i] := flip of bin[i]
end if
flag := true
end if
done
if the flag is not set, then
attach 1 with bin and return
else
return bin
end if
end示例
#include <iostream>
using namespace std;
string get2sComplement(string bin) {
int n = bin.length();
bool flag = false; //flag is used if 1 is seen
for (int i = n - 1; i >= 0; i--) { //traverse from last bit
if (bin[i] == '0' && !flag) {
continue;
} else {
if (flag)
bin[i] = (bin[i] - '0') ^ 1 + '0'; //flip bit using XOR, then convert to ASCII
flag = true;
}
}
if (!flag) //if no 1 is there, just insert 1
return "1" + bin;
else
return bin;
}
int main() {
string str;
cout << "Enter a binary string: ";
cin >> str;
cout << "2's complement of " << str <<" is " << get2sComplement(str);
}输出结果
Enter a binary string: 10110110 2's complement of 10110110 is 01001010
热门推荐
10 祝女儿简短祝福语大全
11 大学新年祝福语简短创意
12 元旦适合的祝福语简短
13 朋友出远门祝福语简短
14 初六简短的祝福语
15 祝男孩生日祝福语简短
16 同事调离的祝福语简短
17 拜年红包的祝福语简短
18 妈妈生日祝福语简短励志