Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.cpp
- * Author: Admin
- *
- * Created on June 17, 2013, 12:06 AM
- */
- #include <cstdlib>
- #include <iostream>
- #include <sstream>
- using namespace std;
- /*
- code the binary class here
- */
- class Binary_Class
- {
- public:
- char bin[32]; //unsigned 32 bit binary
- //Binary_Class () {};
- bool is_zero() const
- {
- for(int i=0;i<32;i++)
- if(this->bin[i]==1) return false;
- return true;
- }
- int td()
- {
- unsigned int temp=1;
- unsigned int res=0;
- for(int i=0;i<32;i++)
- {
- if(bin[i]==1){res+=temp;}
- temp=temp*2;
- }
- return res;
- }
- string ts()
- {
- string temp="";
- for(int i=31;i>=0;i--)
- {
- if(bin[i]==0){temp+="0";}else{temp+="1";};
- }
- return temp;
- }
- void shift_right(int sha)
- {
- int i;
- if(sha>0 && sha<31)
- for(i=0;i<32-sha;i++)
- {
- bin[i]=bin[i+sha];
- }
- for(int j=i;j<32;j++)
- {
- bin[i]=0;
- }
- }
- void shift_left(int sha)
- {
- int i;
- if(sha >0 && sha <31)
- for( i=31;i>=sha;i--)
- {
- bin[i]=bin[i-sha];
- }
- for(int j=i;j>=0;j--)
- {
- bin[i]=0;
- }
- }
- void set_bin(string inp_bin)
- {
- int index=0;
- if(inp_bin.length()<=32){
- for(string::reverse_iterator i= inp_bin.rbegin();i!=inp_bin.rend();i++)
- {
- if(*i=='1'){bin[index++]=1;}
- else{bin[index++]=0;}
- }
- }
- for(;index<32;index++)
- {bin[index]=0;}
- }
- void set_dec(string inp_dec_str)
- {
- int index=0;
- int inp_dec;
- inp_dec=atoi(inp_dec_str.c_str());
- while(inp_dec>0)
- {
- bin[index++]=(inp_dec%2?1:0);
- inp_dec/=2;
- }
- for(;index<32;index++)
- {bin[index]=0;}
- }
- Binary_Class& operator= (const Binary_Class&);
- const Binary_Class operator+ (const Binary_Class&) ;
- const Binary_Class operator- (const Binary_Class&) ;
- const Binary_Class operator* (const Binary_Class&) ;
- const Binary_Class operator/ (const Binary_Class&) ;
- };
- class Binary_ET_Class:public Binary_Class
- { public:
- //Binary_ET_Class () {};
- int to_dec()
- {
- unsigned int temp=1,res=0;
- for(int i=0;i<32;i++)
- {
- if(bin[i]==1){res+=temp;}
- temp=temp*2;
- }
- return res;
- }
- void bnot()
- {
- for(int i=0;i<32;i++)
- {
- bin[i]=bin[i] xor 1;
- }
- }
- Binary_ET_Class & operator= (const Binary_ET_Class& param);
- Binary_ET_Class operator and (Binary_ET_Class param);
- Binary_ET_Class operator or (Binary_ET_Class param);
- bool operator > (Binary_ET_Class param);
- bool operator < (Binary_ET_Class param);
- bool operator == (Binary_ET_Class param);
- bool operator != (Binary_ET_Class param);
- bool operator >= (Binary_ET_Class param);
- bool operator <= (Binary_ET_Class param);
- };
- /*
- *
- */
- Binary_Class & Binary_Class::operator= (const Binary_Class& param)
- {
- for(int i=0;i<32;i++)
- {
- bin[i]=param.bin[i];
- }
- return *this;
- }
- const Binary_Class Binary_Class::operator+ (const Binary_Class& param)
- {
- Binary_Class result;
- result.set_dec("0");
- int i, c = 0;
- for(i = 0; i <32 ; i++){
- result.bin[i] = ((bin[i] ^ param.bin[i]) ^ c); //a xor b xor c
- c = ((bin[i] & param.bin[i]) | (bin[i] &c)) | (param.bin[i] & c); //ab+bc+ca
- }
- result.bin[i] = c;
- return result;
- }
- const Binary_Class Binary_Class::operator- (const Binary_Class& param)
- {
- Binary_Class result;
- Binary_Class one,onecpl;
- Binary_Class org=*this;
- one.set_dec("1");
- result.set_dec("0");
- for(int i=0;i<32;i++)
- {
- onecpl.bin[i]=param.bin[i] xor 1;
- }
- result=org+(onecpl+one);
- return result;
- }
- const Binary_Class Binary_Class::operator* (const Binary_Class& param)
- {
- Binary_Class temp,result;
- temp=*this;
- result.set_dec(0);
- for(int i=0;i<32;i++)
- {
- if(param.bin[i]==1){
- result=result+temp;
- }
- temp=temp+temp;
- }
- return result;
- }
- const Binary_Class Binary_Class::operator/ (const Binary_Class& param)
- {
- if(param.is_zero()){return param;};
- Binary_Class q,r,cmp;
- q.set_dec("0");
- r.set_dec("0");
- for(int i=31;i>=0;i--)
- {
- r.shift_left(1);
- r.bin[0]=this->bin[i];
- cmp=r-param;
- if(cmp.bin[31]==0)
- {
- r=r-param;
- q.bin[i]=1;
- }
- }
- return q;
- }
- // Binary_ET_Class & Binary_ET_Class::operator= (const Binary_ET_Class& param)
- // {
- // Binary_Class::operator=(param);
- // return *this;
- // }
- Binary_ET_Class Binary_ET_Class::operator and (Binary_ET_Class param)
- {
- Binary_ET_Class result;
- for(int i=0;i<32;i++)
- {
- result.bin[i]=this->bin[i] and param.bin[i];
- }
- return result;
- }
- Binary_ET_Class Binary_ET_Class::operator or (Binary_ET_Class param)
- {
- Binary_ET_Class result;
- for(int i=0;i<32;i++)
- {
- result.bin[i]=bin[i] or param.bin[i];
- }
- return result;
- }
- bool Binary_ET_Class::operator > (Binary_ET_Class param)
- {
- bool result=false;
- for(int i=0;i<32;i++)
- {
- if(bin[i]>param.bin[i])return true;
- }
- return result;
- }
- bool Binary_ET_Class::operator < (Binary_ET_Class param)
- {
- bool result=false;
- for(int i=0;i<32;i++)
- {
- if(bin[i]<param.bin[i])return true;
- }
- return result;
- }
- bool Binary_ET_Class::operator == (Binary_ET_Class param)
- {
- bool result=true;
- for(int i=0;i<32;i++)
- {
- if(bin[i]!=param.bin[i])return false;
- }
- return result;
- }
- bool Binary_ET_Class::operator != (Binary_ET_Class param)
- {
- return !(*this==param);
- }
- bool Binary_ET_Class::operator >= (Binary_ET_Class param)
- {
- return (*this==param || *this > param);
- }
- bool Binary_ET_Class::operator <= (Binary_ET_Class param)
- {
- return (*this==param || *this < param);
- }
- int main(int argc, char** argv) {
- Binary_ET_Class sa,sb,sc;
- Binary_Class sd;
- sa.set_dec("10");
- sb.set_dec("2");
- sc.set_dec("0");
- sd=sa/sb;
- sa.shift_left(30);
- //sc=sa+sb;
- //sc.set_dec("0000011");
- cout<<"result1 :"<<sd.ts()<<"\n";
- cout<<"result2 :"<<(unsigned int)(sa.td());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement