Problem D: 二进制类(2)——运算符重载
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 28 Solved: 23
[ Submit][ Status][ Web Board]
Description
在实验四二进制类binary的基础上,将+ 、- 运算符定义为binary 类的成员函数。并且重载运算符~ 、& 、| ,分别表示将二进制数按位取反、按位与及按位或。主
函数设计如下:
int main(){
binary n1="1011";
binary n2=int(n1)+15;
binary n3=n1-binary(7);
n1.print();
n2.print();
n3.print();
binary n4=n1&n2;
binary n5=n1|n2;
binary n6=~n1;
n4.print();
n5.print();
n6.print();
return 0;
}
Input
Output
Sample Output
000000000000101100000000000110100000000000000100000000000000101000000000000110111111111111110100
HINT
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
class binary
{
public:
binary(){ }
binary(char *);
binary(int n);
public:
operator int()
{
int temp = 0;
for(int i = 0; i < 16; i++)
temp = temp * 2 + bits[i] - '0';
return temp;
}
void print()
{
cout << bits << endl;
}
public:
binary operator +(const binary &b)
{
int temp1 = int(*this);
binary tb2 = b;
int temp2 = int(tb2);
return binary(temp1 + temp2);
}
binary operator-(const binary &b)
{
int temp1 = int(*this);
binary tb2 = b;
int temp2 = int(tb2);
return binary(fabs(temp1 - temp2));
}
public:
binary operator~()
{
char temp[17];
for(int i = 0; i < 16; i++)
if(bits[i] == '0') temp[i] = '1';
else temp[i] = '0';
temp[16] = '\0';
return binary(temp);
}
binary operator &(const binary & b)
{
char temp[16];
for(int i = 0; i < 16; i++)
if(bits[i] == '1' && b.bits[i] =='1') temp[i] = '1';
else temp[i] = '0';
temp[16] = '\0';
return binary(temp);
}
public:
binary operator | (const binary & b)
{
char temp[17];
for(int i = 0; i < 16; i++)
if(bits[i] == '0' && b.bits[i] =='0') temp[i] = '0';
else temp[i] = '1';
temp[16] = '\0';
return binary(temp);
}
binary operator =(const binary & b)
{
for(int i = 0; i < 16; i++)
bits[i] = b.bits[i];
bits[16] = '\0';
return *this;
}
private:
char bits[17]; //二进制字模数组,要开16个
};
binary :: binary(char *p)
{
int d = strlen(p)-1;
int i, j;
j = d;
for(i = 15; i >= 15 - d; i--,j--)
bits[i] = p[j];
for(; i >= 0; i--)
bits[i] = '0';
bits[16] = '\0';
}
binary :: binary(int n)
{
int i = 15;
while(n!=0)
{
int t;
t = n % 2;
bits[i] = t + '0';
i--;
n=n / 2;
}
for( int j = 0; j <= i; j++)
bits[j] = '0';
bits[16] = '\0';
}
int main()
{
binary n1="1011";
binary n2=int(n1)+15;
binary n3=n1-binary(7);
n1.print();
n2.print();
n3.print();
binary n4=n1&n2;
binary n5=n1|n2;
binary n6=~n1;
n4.print();
n5.print();
n6.print();
return 0;
}