Untitled

 avatar
unknown
c_cpp
6 months ago
1.9 kB
5
Indexable
long long hexaToDec(const char &hx)
{
  return (hx >= '0' && hx <= '9') ? (hx - '0') : (hx - 'A' + 10);
}
string decToHexa(const long long &x)
{
  if (x == 0)
    return "";
  int curr = (x % 16);
  string currChar;
  if (curr > 9)
    currChar = (curr % 10) + 'A';
  else
    currChar = to_string(curr);
  return decToHexa(x / 16) + currChar;
}
string binToHexa(string bin)
{
  string x = bin.substr(0, 4), y = bin.substr(4, 8);
  int sumX = 0, sumY = 0;
  for (int i = 3; i >= 0; i--)
  {
    sumX += pow(2, 3 - i) * (x[i] - '0');
  }
  for (int i = 3; i >= 0; i--)
  {
    sumY += pow(2, 3 - i) * (y[i] - '0');
  }
  string xx = decToHexa(sumX), yy = decToHexa(sumY);
  return xx + yy;
}
string addTwoBin(string num1, string num2)
{
  while (num1.size() < num2.size())
    num1 = "0" + num1;
  while (num2.size() < num1.size())
    num2 = "0" + num2;
  string result = "";
  int carry = 0;
  for (int i = num1.size() - 1; i >= 0; i--)
  {
    int curr = ((num1[i] - '0') + (num2[i] - '0') + carry);
    result.push_back((curr % 2) + '0');
    carry = (curr > 1);
  }
  if (carry > 0)
    result.push_back(carry + '0');
  reverse(result.begin(), result.end());
  return result;
}
void TwosComp(string &bin)
{
  for (int i = 7; i >= 0; i--)
  {
    if (bin[i] == '1')
    {
      i--;
      while (i != -1)
      {
        if (bin[i] == '1')
          bin[i] = '0';
        else if (bin[i] == '0')
          bin[i] = '1';
        i--;
      }
    }
  }
}
string HexaToBin(string x)
{
  int num = stoi(x);
  string ans = "0000";
  for (int i = 0; i < 4; i++)
  {
    if (num & (1 << i))
    {
      ans[3 - i] = '1';
    }
  }
  return ans;
}
bool IsHexaNumNeg(string xy)
{
  string x,binX;
  x = hexaToDec(xy[0]);
  binX = HexaToBin(x);
  if (binX[0] == '1')
    return true;
  else
    return false;
}
Editor is loading...
Leave a Comment