如何使用按位异或对给定字符串计算 2 进制补码?


在本部分,我们将了解如何对二进制字符串使用按位异或运算来查找 2 进制补码。2 进制补码实际上就是 1 进制补码 + 1。我们将使用按位异或运算来获取 1 进制补码。

我们将从 LSB 开始遍历字符串并查找 0。我们将把所有 1 翻转为 0,直到获得 0。然后翻转找到的 0。

我们将从 LSB 开始遍历。然后忽略所有 0,直到获得 1。忽略第一个 1,我们将使用按位异或运算切换所有位。

算法

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

更新时间:2019-7-30

774 次浏览

开启您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.